ReactOS 0.4.17-dev-1281-g065abb3
devhcd.cpp File Reference
#include "usbhub3.h"
#include "devhcd.h"
#include <debug.h>
Include dependency graph for devhcd.cpp:

Go to the source code of this file.

Classes

struct  HubUsb20Lpm
 

Macros

#define NDEBUG
 
#define UCX_SIZE_ADDRESS0   sizeof(ADDRESS0_OWNERSHIP_ACQUIRE)
 
#define UCX_SIZE_ENABLE   sizeof(USBDEVICE_ENABLE)
 
#define UCX_SIZE_RESET   sizeof(USBDEVICE_RESET)
 
#define UCX_SIZE_ADDRESS   sizeof(USBDEVICE_ADDRESS)
 
#define UCX_SIZE_UPDATE   sizeof(USBDEVICE_UPDATE)
 
#define UCX_SIZE_DISABLE   sizeof(USBDEVICE_DISABLE)
 
#define UCX_SIZE_PURGE   sizeof(USBDEVICE_PURGEIO)
 
#define UCX_SIZE_START   sizeof(USBDEVICE_STARTIO)
 
#define UCX_SIZE_ABORT   sizeof(USBDEVICE_ABORTIO)
 
#define UCX_SIZE_CONFIGURE   sizeof(ENDPOINTS_CONFIGURE)
 
#define UCX_SIZE_EP0_UPDATE   sizeof(DEFAULT_ENDPOINT_UPDATE)
 
#define UCX_SIZE_EP_RESET   sizeof(ENDPOINT_RESET)
 
#define EP0_PACKET_SUPER   512
 
#define EP0_PACKET_HIGH_FULL   64
 
#define EP0_PACKET_LOW   8
 
#define BANDWIDTH_RETRY_DELAY_MS   1000
 
#define HUB_MSG_SET_ADDRESS_FAILED   0x40010001
 
#define HUB_ROOT_RESUME_SIGNAL_MS   20
 
#define LPM20_DEFAULT_BESL   4
 

Functions

 C_ASSERT (UCX_SIZE_UPDATE==0x30)
 
 C_ASSERT (UCX_SIZE_RESET==0x18)
 
static VOID NTAPI HubChildSetPayloadHeader (_In_ HubChild *Child, _In_ ULONG Size)
 
static HubUcxPayload *NTAPI HubChildNewPayload (_In_ HubChild *Child, _In_ ULONG Size)
 
static VOID NTAPI HubChildStartBandwidthTimer (_In_ HubChild *Child)
 
static VOID NTAPI HubChildStopBandwidthTimer (_In_ HubChild *Child)
 
static VOID NTAPI HubChildFailStatus (_In_ HubChild *Child, _In_ NTSTATUS NtStatus, _In_ USBD_STATUS UsbdStatus)
 
static VOID NTAPI HubChildKeepUnchanged (_In_ HubChild *Child, _In_reads_(Count) UCXENDPOINT *Endpoints, _In_ ULONG Count)
 
VOID NTAPI HubConfigMovePipes (_In_opt_ HubConfiguration *Config, _In_ PipeState From, _In_ PipeState To)
 
static VOID NTAPI HubInterfaceSetPipes (_In_ HubInterface *Interface, _In_ PipeState To)
 
NTSTATUS NTAPI HubChildSubmitUcxIoctl (_In_ HubChild *Child, _In_ ULONG IoControlCode)
 
static NTSTATUS NTAPI HubChildEnableDone (_In_ HubChild *Child, _In_ NTSTATUS Status)
 
static BOOLEAN NTAPI HubChildConfigureDone (_In_ HubChild *Child, _Inout_ NTSTATUS *Status)
 
static VOID NTAPI HubChildAddressDone (_In_ HubChild *Child, _In_ NTSTATUS Status)
 
static VOID NTAPI HubChildTakeTunnelState (_In_ HubChild *Child)
 
static VOID NTAPI HubChildUcxIoctlComplete (_In_ WDFREQUEST Request, _In_ WDFIOTARGET Target, _In_ PWDF_REQUEST_COMPLETION_PARAMS Params, _In_ WDFCONTEXT Context)
 
static VOID NTAPI HubChildReadUsb20Lpm (_In_ HubChild *Child, _Out_ HubUsb20Lpm *Lpm)
 
static BOOLEAN NTAPI HubChildComputeLpm20 (_In_ HubChild *Child, _Inout_ PUSBDEVICE_UPDATE Update)
 
static VOID NTAPI HubChildResetTargetEndpoint (_In_ HubChild *Child, _In_ ULONG Flags)
 
 _IRQL_requires_ (PASSIVE_LEVEL) VOID NTAPI HubChildDeleteInterface(_In_ HubChild *Child
 Sends a synchronous IOCTL to the specified device object.
 
 for (Index=0;Index< Interface->PipeCount;Index++)
 
 WdfObjectDelete (Interface->Memory)
 
 if (Config==NULL) return
 
 while (!IsListEmpty(&Config->Interfaces))
 
 WdfObjectDelete (Config->Memory)
 
static VOID NTAPI HubChildClientRequestComplete (_In_ WDFREQUEST Request, _In_ WDFIOTARGET Target, _In_ PWDF_REQUEST_COMPLETION_PARAMS Params, _In_ WDFCONTEXT Context)
 
VOID NTAPI HubChildForwardToController (_In_ HubChild *Child)
 
Hub m_Stack DeviceSetPdo (Hub->UsbDevice(), Child->m_UsbDevice, Pdo)
 
 if (Buffer==NULL)
 
 if (Status==STATUS_BUFFER_TOO_SMALL)
 
 if (!NT_SUCCESS(Status))
 
 _Out_writes_bytes_ (Length) PUSB_HUB_NAME Name
 
 if (Length< FIELD_OFFSET(USB_HUB_NAME, HubName))
 
 RtlCopyMemory (Name->HubName, Info->ControllerNameUnicodeString, Copy)
 
 ExFreePoolWithTag (Info, HUB_TAG_HUB)
 

Variables

static EVT_WDF_REQUEST_COMPLETION_ROUTINE HubChildUcxIoctlComplete
 
static EVT_WDF_REQUEST_COMPLETION_ROUTINE HubChildClientRequestComplete
 
_In_ HubInterface * Interface
 
HubPipe * Pipe
 
ULONG Index
 
_Inout_ HubConfiguration ** Slot
 
PLIST_ENTRY Entry
 
KIRQL Irql
 
KeAcquireSpinLock & Child
 
 Config = *Slot
 
_In_ PDEVICE_OBJECT Pdo
 
_In_ PVOID BusContext
 
_In_ PVOID _Outptr_result_maybenull_ PUSB_BUS_INFORMATION_LEVEL_1 * Result
 
ULONG Length = sizeof(*Buffer)
 
ULONG Actual = 0
 
NTSTATUS Status = Hub->m_Usbdi.QueryBusInformation(BusContext, 1, Buffer, &Length, &Actual)
 
 Buffer = (PUSB_BUS_INFORMATION_LEVEL_1)ExAllocatePoolWithTag(PagedPool, Length, HUB_TAG_HUB)
 
ULONG Copy = min(Info->ControllerNameLength, Length - FIELD_OFFSET(USB_HUB_NAME, HubName))
 
 else
 
_Out_ PUSB_BUS_NOTIFICATION Notification
 
Notification TotalBandwidth = Info->TotalBandwidth
 
Notification ConsumedBandwidth = Info->ConsumedBandwidth
 
Notification ControllerNameLength = Info->ControllerNameLength
 

Macro Definition Documentation

◆ BANDWIDTH_RETRY_DELAY_MS

#define BANDWIDTH_RETRY_DELAY_MS   1000

Definition at line 39 of file devhcd.cpp.

◆ EP0_PACKET_HIGH_FULL

#define EP0_PACKET_HIGH_FULL   64

Definition at line 35 of file devhcd.cpp.

◆ EP0_PACKET_LOW

#define EP0_PACKET_LOW   8

Definition at line 36 of file devhcd.cpp.

◆ EP0_PACKET_SUPER

#define EP0_PACKET_SUPER   512

Definition at line 34 of file devhcd.cpp.

◆ HUB_MSG_SET_ADDRESS_FAILED

#define HUB_MSG_SET_ADDRESS_FAILED   0x40010001

Definition at line 42 of file devhcd.cpp.

◆ HUB_ROOT_RESUME_SIGNAL_MS

#define HUB_ROOT_RESUME_SIGNAL_MS   20

Definition at line 45 of file devhcd.cpp.

◆ LPM20_DEFAULT_BESL

#define LPM20_DEFAULT_BESL   4

Definition at line 48 of file devhcd.cpp.

◆ NDEBUG

#define NDEBUG

Definition at line 11 of file devhcd.cpp.

◆ UCX_SIZE_ABORT

#define UCX_SIZE_ABORT   sizeof(USBDEVICE_ABORTIO)

Definition at line 23 of file devhcd.cpp.

◆ UCX_SIZE_ADDRESS

#define UCX_SIZE_ADDRESS   sizeof(USBDEVICE_ADDRESS)

Definition at line 18 of file devhcd.cpp.

◆ UCX_SIZE_ADDRESS0

#define UCX_SIZE_ADDRESS0   sizeof(ADDRESS0_OWNERSHIP_ACQUIRE)

Definition at line 15 of file devhcd.cpp.

◆ UCX_SIZE_CONFIGURE

#define UCX_SIZE_CONFIGURE   sizeof(ENDPOINTS_CONFIGURE)

Definition at line 24 of file devhcd.cpp.

◆ UCX_SIZE_DISABLE

#define UCX_SIZE_DISABLE   sizeof(USBDEVICE_DISABLE)

Definition at line 20 of file devhcd.cpp.

◆ UCX_SIZE_ENABLE

#define UCX_SIZE_ENABLE   sizeof(USBDEVICE_ENABLE)

Definition at line 16 of file devhcd.cpp.

◆ UCX_SIZE_EP0_UPDATE

#define UCX_SIZE_EP0_UPDATE   sizeof(DEFAULT_ENDPOINT_UPDATE)

Definition at line 25 of file devhcd.cpp.

◆ UCX_SIZE_EP_RESET

#define UCX_SIZE_EP_RESET   sizeof(ENDPOINT_RESET)

Definition at line 26 of file devhcd.cpp.

◆ UCX_SIZE_PURGE

#define UCX_SIZE_PURGE   sizeof(USBDEVICE_PURGEIO)

Definition at line 21 of file devhcd.cpp.

◆ UCX_SIZE_RESET

#define UCX_SIZE_RESET   sizeof(USBDEVICE_RESET)

Definition at line 17 of file devhcd.cpp.

◆ UCX_SIZE_START

#define UCX_SIZE_START   sizeof(USBDEVICE_STARTIO)

Definition at line 22 of file devhcd.cpp.

◆ UCX_SIZE_UPDATE

#define UCX_SIZE_UPDATE   sizeof(USBDEVICE_UPDATE)

Definition at line 19 of file devhcd.cpp.

Function Documentation

◆ _IRQL_requires_()

_IRQL_requires_ ( PASSIVE_LEVEL  )

Sends a synchronous IOCTL to the specified device object.

Parameters
[in]IoControlCodeThe IOCTL to send to the device.
[in]DeviceObjectPointer to the device object that will handle the IOCTL.
[in]InputBufferOptional pointer to a buffer containing input data for the IOCTL. When specified, the buffer should be at least of InputBufferLength size.
[in]InputBufferLengthSize in bytes, of the buffer pointed by InputBuffer.
[out]OutputBufferOptional pointer to a buffer that will receive output data from the IOCTL. When specified, the buffer should be at least of OutputBufferLength size.
[in]OutputBufferLengthSize in bytes, of the buffer pointed by OutputBuffer.
[in]FileObjectOptional pointer to a file object that may be necessary for the IOCTL.
Returns
An NTSTATUS code indicating success or failure of this function.
Note
Must be called at PASSIVE_LEVEL with all APCs enabled.

Nothing is found unless the PCI bus driver publishes the properties.

The root hub name without its prefix; NULL when the PDO has no name.

Grows a private buffer to what the helper asks for.

Lets KMDF handle the IRP, then hands it back here still uncompleted.

Waits for the device machine to answer a PnP or power event; returns the PnP status.

Definition at line 2121 of file class.c.

13175{
13177
13178 PAGED_CODE();
13179
13180 TracePrint((TRACE_LEVEL_VERBOSE,
13181 TRACE_FLAG_PNP,
13182 "ClassDetermineTokenOperationCommandSupport (%p): Entering function.\n",
13183 DeviceObject));
13184
13185 //
13186 // Send down Inquiry for VPD_THIRD_PARTY_COPY_PAGE and cache away the device parameters
13187 // from WINDOWS_BLOCK_DEVICE_TOKEN_LIMITS_DESCRIPTOR.
13188 //
13190
13191 if (NT_SUCCESS(status)) {
13192
13193 ULONG maxListIdentifier = MaxTokenOperationListIdentifier;
13194
13195 //
13196 // Query the maximum list identifier to use for TokenOperation commands.
13197 //
13198 if (NT_SUCCESS(ClasspGetMaximumTokenListIdentifier(DeviceObject, REG_DISK_CLASS_CONTROL, &maxListIdentifier))) {
13199 if (maxListIdentifier >= MIN_TOKEN_LIST_IDENTIFIERS) {
13200
13201 NT_ASSERT(maxListIdentifier <= MAX_TOKEN_LIST_IDENTIFIERS);
13202 MaxTokenOperationListIdentifier = maxListIdentifier;
13203 }
13204 }
13205
13206 }
13207
13208 TracePrint((TRACE_LEVEL_VERBOSE,
13209 TRACE_FLAG_PNP,
13210 "ClassDetermineTokenOperationCommandSupport (%p): Exiting function with status %x.\n",
13212 status));
13213
13214 return status;
13215}
#define PAGED_CODE()
LONG NTSTATUS
Definition: precomp.h:26
#define REG_DISK_CLASS_CONTROL
Definition: classp.h:218
#define MAX_TOKEN_LIST_IDENTIFIERS
Definition: classp.h:215
#define MIN_TOKEN_LIST_IDENTIFIERS
Definition: classp.h:214
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
ULONG MaxTokenOperationListIdentifier
Definition: class.c:107
_IRQL_requires_same_ NTSTATUS ClasspGetBlockDeviceTokenLimitsInfo(_Inout_ PDEVICE_OBJECT DeviceObject)
Definition: class.c:13220
#define STATUS_SUCCESS
Definition: shellext.h:65
#define TRACE_LEVEL_VERBOSE
Definition: storswtr.h:30
Definition: ps.c:97
uint32_t ULONG
Definition: typedefs.h:59
_In_ PDEVICE_OBJECT DeviceObject
Definition: wdfdevice.h:2061
#define NT_ASSERT
Definition: rtlfuncs.h:3334

◆ _Out_writes_bytes_()

_Out_writes_bytes_ ( Length  )

◆ C_ASSERT() [1/2]

C_ASSERT ( UCX_SIZE_RESET  = =0x18)

◆ C_ASSERT() [2/2]

C_ASSERT ( UCX_SIZE_UPDATE  = =0x30)

◆ DeviceSetPdo()

Hub m_Stack DeviceSetPdo ( Hub->  UsbDevice(),
Child->  m_UsbDevice,
Pdo   
)

◆ ExFreePoolWithTag()

ExFreePoolWithTag ( Info  ,
HUB_TAG_HUB   
)

◆ for()

for ( Index  = 0; Index < Interface->PipeCount; Index++)

Definition at line 1239 of file devhcd.cpp.

1240 {
1241 Pipe = &Interface->Pipes[Index];
1242 if (Pipe->State != PipeState::Disabled)
1243 continue;
1244
1245 Hub->m_Stack.EndpointDelete(Hub->UsbDevice(), Child->m_UsbDevice, Pipe->Endpoint);
1246 Pipe->State = PipeState::Deleted;
1247 }
HubFdo * Hub
Definition: bootdev.cpp:261
UCXHUB_STACK_INTERFACE m_Stack
Definition: fdo.h:356
UCXUSBDEVICE UsbDevice() const
Definition: fdo.h:180
ULONG Index
Definition: devhcd.cpp:1237
PFN_UCXHUB_ENDPOINT_DELETE EndpointDelete
Definition: hubucx.h:441
_In_ UCXUSBDEVICE _In_ ULONG Interface
Definition: ucxusbdevice.h:428
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFDEVICE Child
Definition: wdffdo.h:536
_In_ WDFUSBPIPE Pipe
Definition: wdfusb.h:1741

◆ HubChildAddressDone()

static VOID NTAPI HubChildAddressDone ( _In_ HubChild *  Child,
_In_ NTSTATUS  Status 
)
static

Definition at line 341 of file devhcd.cpp.

344{
346
347 if (NT_SUCCESS(Status))
348 {
349 Child->m_Address = (UCHAR)Child->m_UcxPayload->Address.Address;
350
351 if (InterlockedAnd(&Child->m_StateFlags, ~Flag) & Flag)
352 {
353 DPRINT1("Device %p SET_ADDRESS works again after an earlier failure\n", Child);
355 }
356
357 return;
358 }
359
360 Child->m_EnumMessageId = HUB_MSG_SET_ADDRESS_FAILED;
361
362 if ((Child->m_Kind & DSM_KIND_PORT30) &&
363 !(InterlockedOr(&Child->m_StateFlags, Flag) & Flag))
364 {
365 DPRINT1("Device %p SET_ADDRESS failed, SuperSpeed connects now get extra debounce time\n", Child);
367 }
368}
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define DPRINT1
Definition: precomp.h:8
#define HUB_MSG_SET_ADDRESS_FAILED
Definition: devhcd.cpp:42
if(Length< FIELD_OFFSET(USB_HUB_NAME, HubName))
Definition: devhcd.cpp:1456
#define DSM_KIND_PORT30
Definition: devsm.h:153
HubDriverState HubDriver
Definition: entry.cpp:13
Status
Definition: gdiplustypes.h:24
@ LastSetAddressFailed
#define InterlockedOr
Definition: interlocked.h:239
#define InterlockedAnd
Definition: interlocked.h:77
long LONG
Definition: pedump.c:60
Definition: xml2sdb.h:103
volatile LONG SuperSpeedDebounceVotes
Definition: hubdriver.h:108
unsigned char UCHAR
Definition: typedefs.h:53

Referenced by HubChildUcxIoctlComplete().

◆ HubChildClientRequestComplete()

static VOID NTAPI HubChildClientRequestComplete ( _In_ WDFREQUEST  Request,
_In_ WDFIOTARGET  Target,
_In_ PWDF_REQUEST_COMPLETION_PARAMS  Params,
_In_ WDFCONTEXT  Context 
)
static

Definition at line 1335 of file devhcd.cpp.

1340{
1342
1344
1345 WdfRequestCompleteWithInformation(Request, Params->IoStatus.Status, Params->IoStatus.Information);
1347}
@ ControllerRequestDone
_In_ PIRP _In_ PIO_COMPLETION_ROUTINE _In_ PVOID Context
Definition: kse.h:81
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:329
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFREQUEST Request
WdfRequestCompleteWithInformation(Request, STATUS_SUCCESS, ActualLength)
_In_ WDFIOTARGET Target
Definition: wdfrequest.h:306
_In_ WDFIOTARGET _In_ PWDF_REQUEST_COMPLETION_PARAMS Params
Definition: wdfrequest.h:308

◆ HubChildComputeLpm20()

static BOOLEAN NTAPI HubChildComputeLpm20 ( _In_ HubChild *  Child,
_Inout_ PUSBDEVICE_UPDATE  Update 
)
static

Definition at line 694 of file devhcd.cpp.

697{
700
702
703 if (Child->HasProperty(ChildProperty::IsHub))
705 else if (Child->HasHack(ChildHack::DisableUsb20Lpm))
707 else if (Child->m_Hub->HasFlag(HubFlag::DisableUsb20Lpm))
711 else if (!Lpm.Capable)
713 else if (!Lpm.Besl)
715 else if (!Child->m_Port->HasProperty(PortProperty::Usb20LpmCapable))
717 else
719
721 {
722 Update->Flags.Update20HardwareLpmParameters = 1;
723 Update->Usb20HardwareLpmParameters.HardwareLpmEnable = 1;
724 Update->Usb20HardwareLpmParameters.L1Timeout = HubDriver.Usb20LpmTimeout;
725 Update->Usb20HardwareLpmParameters.RemoteWakeEnable =
727 Update->Usb20HardwareLpmParameters.BestEffortServiceLatency = LPM20_DEFAULT_BESL;
728 Update->Usb20HardwareLpmParameters.BestEffortServiceLatencyDeep = 0;
729 Update->Usb20HardwareLpmParameters.HostInitiatedResumeDurationMode = 0;
730
731 if (Child->m_Port->HasProperty(PortProperty::BeslCapable))
732 {
733 if (Lpm.BaselineValid)
734 Update->Usb20HardwareLpmParameters.BestEffortServiceLatency = Lpm.Baseline;
735
736 if (Lpm.DeepValid)
737 {
738 Update->Usb20HardwareLpmParameters.BestEffortServiceLatencyDeep = Lpm.Deep;
739 Update->Usb20HardwareLpmParameters.HostInitiatedResumeDurationMode = 1;
740 }
741 }
742 }
743
744 /* Diagnostic only; the parameters still go out and UCX ignores them */
746 : (ULONG)Result;
747 DPRINT("Device %p USB 2.0 LPM status %lu\n", Child, Child->m_Lpm20Status);
748
750}
@ Update
Definition: registry.c:565
_In_ ULONG _Out_opt_ HubBosInfo _Out_opt_ PUSHORT _Out_opt_ PUSHORT _Inout_opt_ PBOOLEAN _Inout_opt_ HubLpmInfo * Lpm
Definition: desccheck.cpp:2221
#define LPM20_DEFAULT_BESL
Definition: devhcd.cpp:48
static VOID NTAPI HubChildReadUsb20Lpm(_In_ HubChild *Child, _Out_ HubUsb20Lpm *Lpm)
Definition: devhcd.cpp:630
_In_ PVOID _Outptr_result_maybenull_ PUSB_BUS_INFORMATION_LEVEL_1 * Result
Definition: devhcd.cpp:1397
HubLpm20Status
Definition: devhcd.h:29
#define DSM_KIND_SUPER_SPEED
Definition: devsm.h:150
@ DisableRemoteWakeForUsb20Lpm
@ EnableUsb20HardwareLpm
#define DPRINT
Definition: sndvol32.h:73
BOOLEAN HasFlag(_In_ HubGlobal Flag) const
Definition: hubdriver.h:119
UCHAR Usb20LpmTimeout
Definition: hubdriver.h:103
@ DisableUsb20Lpm

Referenced by DeviceMachine::UpdateDeviceInController(), and DeviceMachine::UpdateLpm20().

◆ HubChildConfigureDone()

static BOOLEAN NTAPI HubChildConfigureDone ( _In_ HubChild *  Child,
_Inout_ NTSTATUS *  Status 
)
static

FALSE when the completion already posted its own event.

Definition at line 251 of file devhcd.cpp.

254{
255 PENDPOINTS_CONFIGURE Configure = &Child->m_UcxPayload->Configure;
257
260 if (Child->m_OldInterface != NULL)
262
263 if (Configure->ExitLatencyDelta != 0)
264 {
265 /* The ELD exit latency is cleared either way */
266 if (Configure->FailureFlags.MaxExitLatencyTooLarge)
267 {
268 DPRINT1("Device %p exit latency delta %lu rejected, effective latency %u\n",
269 Child, Configure->ExitLatencyDelta, Child->m_EffectiveExitLatency);
270 Child->m_MaxExitLatencyFromEld = 0;
271 }
272 else if (NT_SUCCESS(*Status))
273 {
274 Child->m_MaxExitLatencyFromEld = Child->m_EffectiveExitLatency + Configure->ExitLatencyDelta;
275 DPRINT("Device %p max exit latency from delta is %lu\n", Child, Child->m_MaxExitLatencyFromEld);
276 }
277 else
278 {
279 Child->m_MaxExitLatencyFromEld = 0;
280 }
281 }
282
283 Failed = Configure->FailureFlags.InsufficientBandwidth ||
284 Configure->FailureFlags.InsufficientHardwareResourcesForEndpoints ||
285 Configure->FailureFlags.MaxExitLatencyTooLarge;
286
287 if (Failed)
288 {
289 DPRINT("Device %p endpoint configure ran out of bandwidth or resources\n", Child);
290 Child->m_LastUsbdStatus = USBD_STATUS_NO_BANDWIDTH;
292
293 /* Older controllers report a latency problem as a resource problem; retry without U1 and U2 */
294 if (Child->m_EffectiveExitLatency != 0)
295 {
296 DPRINT1("Device %p endpoint configure failed at exit latency %u, retrying without U1 and U2\n",
297 Child, Child->m_EffectiveExitLatency);
298 HubChildKeepUnchanged(Child, Child->m_EndpointsToDisable, Child->m_DisableCount);
299 Child->m_DisableCount = 0;
300
301 /* The USBD code goes into the NT status here */
304 return FALSE;
305 }
306
308 }
309
312 {
313 DPRINT1("Device %p select failed by the alternate setting filter\n", Child);
314 Child->m_LastUsbdStatus = USBD_STATUS_NO_BANDWIDTH;
317 }
318 else if (Child->m_EnableCount != 0 && NT_SUCCESS(*Status))
319 {
321 }
322 else if (*Status == STATUS_UNSUCCESSFUL)
323 {
325 }
326
327 HubConfigMovePipes(Child->m_CurrentConfig,
330
331 Child->m_DisableCount = 0;
332 Child->m_EnableCount = 0;
333 Child->m_UnchangedCount = 0;
334 return TRUE;
335}
unsigned char BOOLEAN
Definition: actypes.h:127
USBD_STATUS NTAPI HubNtStatusToUsbd(_In_ NTSTATUS Status)
Definition: childpdo.cpp:190
static VOID NTAPI HubChildKeepUnchanged(_In_ HubChild *Child, _In_reads_(Count) UCXENDPOINT *Endpoints, _In_ ULONG Count)
Definition: devhcd.cpp:115
static VOID NTAPI HubInterfaceSetPipes(_In_ HubInterface *Interface, _In_ PipeState To)
Definition: devhcd.cpp:160
static VOID NTAPI HubChildStopBandwidthTimer(_In_ HubChild *Child)
Definition: devhcd.cpp:93
VOID NTAPI HubConfigMovePipes(_In_opt_ HubConfiguration *Config, _In_ PipeState From, _In_ PipeState To)
Definition: devhcd.cpp:133
static VOID NTAPI HubChildStartBandwidthTimer(_In_ HubChild *Child)
Definition: devhcd.cpp:84
@ ControllerExitLatencyTooLarge
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define NTSTATUS
Definition: precomp.h:19
@ AltSettingFiltered
static LRESULT Configure(const CodecInfo *pi, HWND hWnd)
Definition: msrle32.c:1192
@ Failed
Definition: arc.h:88
#define STATUS_UNSUCCESSFUL
Definition: udferr_usr.h:132
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158
#define USBD_STATUS_NO_BANDWIDTH
Definition: usb.h:206

Referenced by HubChildUcxIoctlComplete().

◆ HubChildEnableDone()

static NTSTATUS NTAPI HubChildEnableDone ( _In_ HubChild *  Child,
_In_ NTSTATUS  Status 
)
static

Definition at line 219 of file devhcd.cpp.

222{
223 PUSBDEVICE_ENABLE Enable = &Child->m_UcxPayload->Enable;
224
225 if (Enable->FailureFlags.InsufficientHardwareResourcesForDefaultEndpoint ||
226 Enable->FailureFlags.InsufficientHardwareResourcesForDevice)
227 {
228 DPRINT("Device %p enable ran out of controller resources\n", Child);
229 Child->m_LastUsbdStatus = USBD_STATUS_NO_BANDWIDTH;
231 return STATUS_UNSUCCESSFUL;
232 }
233
234 if (NT_SUCCESS(Status))
235 {
237 return Status;
238 }
239
240 /* A generic failure is reported as out of resources */
243
244 return Status;
245}
NTSTATUS Status
Definition: devhcd.cpp:1401
_In_ ULONGLONG _In_ ULONGLONG _In_ BOOLEAN Enable
Definition: ntddpcm.h:142

Referenced by HubChildUcxIoctlComplete().

◆ HubChildFailStatus()

static VOID NTAPI HubChildFailStatus ( _In_ HubChild *  Child,
_In_ NTSTATUS  NtStatus,
_In_ USBD_STATUS  UsbdStatus 
)
static

◆ HubChildForwardToController()

VOID NTAPI HubChildForwardToController ( _In_ HubChild *  Child)

Sends the device's current client request to UCX as is; completes it, then posts ControllerRequestDone.

Definition at line 1352 of file devhcd.cpp.

1354{
1355 WDFREQUEST Request = Child->m_ClientRequest;
1356
1357 WdfRequestFormatRequestUsingCurrentType(Request);
1358 WdfRequestSetCompletionRoutine(Request, HubChildClientRequestComplete, Child);
1359
1360 if (!WdfRequestSend(Request, Child->m_Hub->m_RootHubTarget, WDF_NO_SEND_OPTIONS))
1361 {
1362 DPRINT1("Device %p client request not sent 0x%lx\n", Child, WdfRequestGetStatus(Request));
1363 WdfRequestComplete(Request, WdfRequestGetStatus(Request));
1365 }
1366}
static EVT_WDF_REQUEST_COMPLETION_ROUTINE HubChildClientRequestComplete
Definition: devhcd.cpp:51
_Must_inspect_result_ FORCEINLINE BOOLEAN WdfRequestSend(_In_ WDFREQUEST Request, _In_ WDFIOTARGET Target, _In_opt_ PWDF_REQUEST_SEND_OPTIONS Options)
Definition: wdfrequest.h:677
#define WDF_NO_SEND_OPTIONS
Definition: wdftypes.h:109

Referenced by DeviceMachine::ForwardToController().

◆ HubChildKeepUnchanged()

static VOID NTAPI HubChildKeepUnchanged ( _In_ HubChild *  Child,
_In_reads_(Count) UCXENDPOINT *  Endpoints,
_In_ ULONG  Count 
)
static

Definition at line 115 of file devhcd.cpp.

119{
120 ULONG Index;
121
122 for (Index = 0; Index < Count; Index++)
123 {
124 if (Child->m_UnchangedCount >= Child->m_EndpointArrayCapacity)
125 break;
126
127 Child->m_EndpointsUnchanged[Child->m_UnchangedCount++] = Endpoints[Index];
128 }
129}
USHORT Count
Definition: userreq.cpp:200
_In_ WDFCOLLECTION _In_ ULONG Index

Referenced by DeviceMachine::EndpointsNeedDisableOnFailure(), and HubChildConfigureDone().

◆ HubChildNewPayload()

static HubUcxPayload *NTAPI HubChildNewPayload ( _In_ HubChild *  Child,
_In_ ULONG  Size 
)
static

◆ HubChildReadUsb20Lpm()

static VOID NTAPI HubChildReadUsb20Lpm ( _In_ HubChild *  Child,
_Out_ HubUsb20Lpm *  Lpm 
)
static

Definition at line 630 of file devhcd.cpp.

633{
634 PUSB_BOS_DESCRIPTOR Bos = Child->m_Bos;
638 PUCHAR End;
639 UCHAR Baseline;
640 UCHAR Deep;
641
642 RtlZeroMemory(Lpm, sizeof(*Lpm));
643
644 if (Bos == NULL)
645 return;
646
647 Current = (PUCHAR)Bos + Bos->bLength;
648 End = (PUCHAR)Bos + Bos->wTotalLength;
649
650 for (; Current + sizeof(*Common) <= End; Current += Common->bLength)
651 {
653 if (Common->bLength == 0)
654 break;
655
657
658 if (Common->bDescriptorType != USB_DEVICE_CAPABILITY_DESCRIPTOR_TYPE ||
659 Common->bLength < sizeof(*Extension) ||
660 Current + sizeof(*Extension) > End ||
661 Extension->bDevCapabilityType != USB_DEVICE_CAPABILITY_USB20_EXTENSION ||
662 !Extension->bmAttributes.LPMCapable)
663 {
664 continue;
665 }
666
667 Baseline = (UCHAR)Extension->bmAttributes.BaselineBESL;
668 Deep = (UCHAR)Extension->bmAttributes.DeepBESL;
669
670 Lpm->Capable = TRUE;
671 if (Extension->bmAttributes.BESLAndAlternateHIRDSupported)
672 Lpm->Besl = TRUE;
673
674 if (Extension->bmAttributes.BaselineBESLValid && Baseline != 0)
675 {
676 Lpm->BaselineValid = TRUE;
677 Lpm->Baseline = Baseline;
678 }
679
680 /* A deep value not above a valid baseline is ignored */
681 if (Extension->bmAttributes.DeepBESLValid && Deep != 0 &&
682 !(Extension->bmAttributes.BaselineBESLValid && Deep <= Baseline))
683 {
684 Lpm->DeepValid = TRUE;
685 Lpm->Deep = Deep;
686 }
687 }
688}
PUCHAR End
Definition: desccheck.cpp:2229
_Inout_opt_ PUNICODE_STRING Extension
Definition: fltkernel.h:1092
HubUxdSettings Current
USHORT wTotalLength
Definition: usb300.h:103
unsigned char * PUCHAR
Definition: typedefs.h:53
struct _USB_COMMON_DESCRIPTOR * PUSB_COMMON_DESCRIPTOR
struct _USB_DEVICE_CAPABILITY_USB20_EXTENSION_DESCRIPTOR * PUSB_DEVICE_CAPABILITY_USB20_EXTENSION_DESCRIPTOR
#define USB_DEVICE_CAPABILITY_DESCRIPTOR_TYPE
Definition: usb300.h:18
#define USB_DEVICE_CAPABILITY_USB20_EXTENSION
Definition: usb300.h:26

Referenced by HubChildComputeLpm20().

◆ HubChildResetTargetEndpoint()

static VOID NTAPI HubChildResetTargetEndpoint ( _In_ HubChild *  Child,
_In_ ULONG  Flags 
)
static

Definition at line 945 of file devhcd.cpp.

948{
950
951 if (Child->m_TargetPipe == NULL)
952 {
953 DPRINT1("Device %p endpoint reset without a target pipe\n", Child);
956 return;
957 }
958
959 Payload->EndpointReset.Endpoint = Child->m_TargetPipe->Endpoint;
962}
NTSTATUS NTAPI HubChildSubmitUcxIoctl(_In_ HubChild *Child, _In_ ULONG IoControlCode)
Definition: devhcd.cpp:174
#define UCX_SIZE_EP_RESET
Definition: devhcd.cpp:26
static VOID NTAPI HubChildFailStatus(_In_ HubChild *Child, _In_ NTSTATUS NtStatus, _In_ USBD_STATUS UsbdStatus)
Definition: devhcd.cpp:102
static HubUcxPayload *NTAPI HubChildNewPayload(_In_ HubChild *Child, _In_ ULONG Size)
Definition: devhcd.cpp:72
@ ControllerIoctlFailed
_In_ D3DDDI_VIDEO_PRESENT_TARGET_ID _In_ ULONG _In_ ULONG Flags
Definition: dispmprt.h:245
#define IOCTL_UCXHUB_ENDPOINT_RESET
Definition: hubucx.h:63
ENDPOINT_RESET_FLAGS Flags
Definition: ucxendpoint.h:49
UCXENDPOINT Endpoint
Definition: ucxendpoint.h:48
WDF_EXTERN_C_START enum _ENDPOINT_RESET_FLAGS ENDPOINT_RESET_FLAGS
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
ENDPOINT_RESET EndpointReset
Definition: hubchild.h:221
#define USBD_STATUS_INVALID_PIPE_HANDLE
Definition: usb.h:205

Referenced by DeviceMachine::ResetEndpoint(), and DeviceMachine::ResetEndpointAndTransfers().

◆ HubChildSetPayloadHeader()

static VOID NTAPI HubChildSetPayloadHeader ( _In_ HubChild *  Child,
_In_ ULONG  Size 
)
static

Definition at line 58 of file devhcd.cpp.

61{
62 PUSBDEVICE_MGMT_HEADER Header = &Child->m_UcxPayload->Header;
63
64 Header->Size = Size;
65 Header->Hub = Child->m_Hub->UsbDevice();
66 Header->UsbDevice = Child->m_UsbDevice;
67}
Definition: Header.h:9
Header(const std::string &filename_)
Definition: Header.h:18

Referenced by HubChildNewPayload(), and DeviceMachine::UpdateLpm20().

◆ HubChildStartBandwidthTimer()

static VOID NTAPI HubChildStartBandwidthTimer ( _In_ HubChild *  Child)
static

Definition at line 84 of file devhcd.cpp.

86{
87 WdfTimerStart(Child->m_BandwidthRetryTimer, WDF_REL_TIMEOUT_IN_MS(BANDWIDTH_RETRY_DELAY_MS));
88}
#define BANDWIDTH_RETRY_DELAY_MS
Definition: devhcd.cpp:39
FORCEINLINE LONGLONG WDF_REL_TIMEOUT_IN_MS(_In_ ULONGLONG Time)
Definition: wdfcore.h:80

Referenced by HubChildConfigureDone(), and HubChildEnableDone().

◆ HubChildStopBandwidthTimer()

static VOID NTAPI HubChildStopBandwidthTimer ( _In_ HubChild *  Child)
static

Definition at line 93 of file devhcd.cpp.

95{
96 WdfTimerStop(Child->m_BandwidthRetryTimer, FALSE);
97}

Referenced by HubChildConfigureDone(), HubChildEnableDone(), and DeviceMachine::ProgramEndpoints().

◆ HubChildSubmitUcxIoctl()

NTSTATUS NTAPI HubChildSubmitUcxIoctl ( _In_ HubChild *  Child,
_In_ ULONG  IoControlCode 
)

Sends the payload already in the device's UCX buffer. On a send failure the failure event is posted here and the completion never runs.

Definition at line 174 of file devhcd.cpp.

177{
178 WDFIOTARGET Target = Child->m_Hub->m_RootHubTarget;
179 WDFREQUEST Request = Child->m_UcxRequest;
182
184 Status = WdfRequestReuse(Request, &Reuse);
185 if (!NT_SUCCESS(Status))
186 DPRINT1("Device %p UCX request reuse failed 0x%lx\n", Child, Status);
187
188 Child->m_UcxIoctl = IoControlCode;
189
190 /* The request was made on the local target; that stack is at least as deep */
191 Status = WdfIoTargetFormatRequestForInternalIoctlOthers(Target,
192 Request,
194 Child->m_UcxPayloadMemory,
195 NULL,
196 NULL,
197 NULL,
198 NULL,
199 NULL);
200 if (NT_SUCCESS(Status))
201 {
202 WdfRequestSetCompletionRoutine(Request, HubChildUcxIoctlComplete, Child);
203
205 return STATUS_SUCCESS;
206
207 Status = WdfRequestGetStatus(Request);
208 }
209
210 DPRINT1("Device %p UCX request 0x%lx not sent 0x%lx\n", Child, IoControlCode, Status);
213 return Status;
214}
static EVT_WDF_REQUEST_COMPLETION_ROUTINE HubChildUcxIoctlComplete
Definition: devhcd.cpp:50
return pRequest Reuse(ReuseParams)
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFREQUEST _In_ size_t _In_ size_t _In_ ULONG IoControlCode
@ WDF_REQUEST_REUSE_NO_FLAGS
Definition: wdfrequest.h:92
FORCEINLINE VOID WDF_REQUEST_REUSE_PARAMS_INIT(_Out_ PWDF_REQUEST_REUSE_PARAMS Params, _In_ ULONG Flags, _In_ NTSTATUS Status)
Definition: wdfrequest.h:364

Referenced by DeviceMachine::AbortDeviceIo(), DeviceMachine::ClaimAddressZero(), DeviceMachine::DisableDeviceInController(), DeviceMachine::EnableDeviceInController(), HubChildResetTargetEndpoint(), DeviceMachine::NotifyDeviceReset(), DeviceMachine::ProgramEndpoints(), DeviceMachine::PurgeDeviceIo(), DeviceMachine::PurgeDeviceTreeIo(), DeviceMachine::PurgeIoForSuspend(), DeviceMachine::SetDeviceAddress(), DeviceMachine::StartDeviceIo(), DeviceMachine::UpdateDefaultEndpoint(), DeviceMachine::UpdateDeviceInController(), DeviceMachine::UpdateExitLatency(), and DeviceMachine::UpdateLpm20().

◆ HubChildTakeTunnelState()

static VOID NTAPI HubChildTakeTunnelState ( _In_ HubChild *  Child)
static

Definition at line 374 of file devhcd.cpp.

376{
377 PUSBDEVICE_UPDATE Update = &Child->m_UcxPayload->Update;
378 UCHAR State;
379
380 if (!Update->Flags.UpdateTunnelState)
381 return;
382
385 {
386 DPRINT1("Device %p controller gave no USB4 tunnel state\n", Child);
387 return;
388 }
389
390 DPRINT("Device %p USB4 tunnel state %u\n", Child, State);
391 Child->m_TunnelState = State;
392}
#define HUB_TUNNEL_STATE_NONE
Definition: hubchild.h:50
FORCEINLINE PUCXHUB_UPDATE_TUNNEL_ANSWER NTAPI UcxHubUpdateTunnelAnswer(_In_ PUSBDEVICE_UPDATE Update)
Definition: hubucx.h:556

Referenced by HubChildUcxIoctlComplete().

◆ HubChildUcxIoctlComplete()

static VOID NTAPI HubChildUcxIoctlComplete ( _In_ WDFREQUEST  Request,
_In_ WDFIOTARGET  Target,
_In_ PWDF_REQUEST_COMPLETION_PARAMS  Params,
_In_ WDFCONTEXT  Context 
)
static

Definition at line 397 of file devhcd.cpp.

402{
404 NTSTATUS Status = Params->IoStatus.Status;
405
408
409 switch (Child->m_UcxIoctl)
410 {
413 break;
414
417 return;
418 break;
419
422 break;
423
426 break;
427
429 /* Every successful update counts as taking the target latency, even ones without it */
430 if (NT_SUCCESS(Status))
431 {
432 Child->m_EffectiveExitLatency = Child->m_TargetExitLatency;
434 }
435 else if (Child->m_UcxPayload->Update.FailureFlags.MaxExitLatencyTooLarge)
436 {
437 DPRINT1("Device %p exit latency %u too large for the controller 0x%lx\n",
438 Child, Child->m_TargetExitLatency, Status);
440 return;
441 }
442 break;
443
444 default:
445 break;
446 }
447
448 if (!NT_SUCCESS(Status))
449 {
450 DPRINT1("Device %p UCX request 0x%lx failed 0x%lx\n", Child, Child->m_UcxIoctl, Status);
451
452 /* A USBD status left over from an earlier failure wins */
453 Child->m_LastNtStatus = Status;
454 if (Child->m_LastUsbdStatus == 0)
455 Child->m_LastUsbdStatus = HubNtStatusToUsbd(Status);
456 }
457
459}
static VOID NTAPI HubChildAddressDone(_In_ HubChild *Child, _In_ NTSTATUS Status)
Definition: devhcd.cpp:341
static NTSTATUS NTAPI HubChildEnableDone(_In_ HubChild *Child, _In_ NTSTATUS Status)
Definition: devhcd.cpp:219
static VOID NTAPI HubChildTakeTunnelState(_In_ HubChild *Child)
Definition: devhcd.cpp:374
static BOOLEAN NTAPI HubChildConfigureDone(_In_ HubChild *Child, _Inout_ NTSTATUS *Status)
Definition: devhcd.cpp:251
@ ControllerIoctlDone
#define IOCTL_UCXHUB_DEVICE_ENABLE
Definition: hubucx.h:53
#define IOCTL_UCXHUB_DEVICE_ADDRESS
Definition: hubucx.h:55
#define IOCTL_UCXHUB_DEVICE_UPDATE
Definition: hubucx.h:56
#define IOCTL_UCXHUB_DEVICE_RESET
Definition: hubucx.h:54
#define IOCTL_UCXHUB_ENDPOINTS_CONFIGURE
Definition: hubucx.h:61

◆ HubConfigMovePipes()

VOID NTAPI HubConfigMovePipes ( _In_opt_ HubConfiguration *  Config,
_In_ PipeState  From,
_In_ PipeState  To 
)

Moves every pipe of a configuration in state From to state To.

Definition at line 133 of file devhcd.cpp.

137{
140 ULONG Index;
141
142 if (Config == NULL)
143 return;
144
145 for (Entry = Config->Interfaces.Flink; Entry != &Config->Interfaces; Entry = Entry->Flink)
146 {
148
149 for (Index = 0; Index < Interface->PipeCount; Index++)
150 {
151 if (Interface->Pipes[Index].State == From)
152 Interface->Pipes[Index].State = To;
153 }
154 }
155}
PLIST_ENTRY Entry
Definition: devhcd.cpp:1262
_In_ HubInterface * Interface
Definition: devhcd.cpp:1234
Definition: typedefs.h:120
struct _LIST_ENTRY * Flink
Definition: typedefs.h:121
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
_Must_inspect_result_ _In_ WDFDEVICE _In_ PUCX_CONTROLLER_CONFIG Config

Referenced by DeviceMachine::EndpointsNeedDisableOnFailure(), HubChildConfigureDone(), HubChildUcxIoctlComplete(), DeviceMachine::MarkPendingEndpointsDisabled(), DeviceMachine::NotifyDeviceReset(), and DeviceMachine::ProgramEndpoints().

◆ HubInterfaceSetPipes()

static VOID NTAPI HubInterfaceSetPipes ( _In_ HubInterface *  Interface,
_In_ PipeState  To 
)
static

Definition at line 160 of file devhcd.cpp.

163{
164 ULONG Index;
165
166 for (Index = 0; Index < Interface->PipeCount; Index++)
167 Interface->Pipes[Index].State = To;
168}

Referenced by HubChildConfigureDone().

◆ if() [1/5]

if ( !  NT_SUCCESSStatus)

Definition at line 1428 of file devhcd.cpp.

1429 {
1430 DPRINT1("Hub %p bus information query failed 0x%lx\n", Hub, Status);
1432 return Status;
1433 }
Definition: bufpool.h:45
#define HUB_TAG_HUB
Definition: hubutil.h:12
#define ExFreePoolWithTag(_P, _T)
Definition: module.h:1109

◆ if() [2/5]

if ( Buffer  = = NULL)

Definition at line 1406 of file devhcd.cpp.

1407 {
1408 DPRINT1("Hub %p no memory for bus information\n", Hub);
1410 }

◆ if() [3/5]

if ( Config  = =NULL)

◆ if() [4/5]

if ( )

Definition at line 1456 of file devhcd.cpp.

1457 {
1458 DPRINT1("Hub %p controller name buffer of %lu bytes is too small\n", Hub, Length);
1460 }
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:102
#define STATUS_BUFFER_TOO_SMALL
Definition: shellext.h:69

Referenced by HubChildAddressDone().

◆ if() [5/5]

Definition at line 1413 of file devhcd.cpp.

1414 {
1416
1417 Length = Actual;
1419 if (Buffer == NULL)
1420 {
1421 DPRINT1("Hub %p no memory for %lu bytes of bus information\n", Hub, Length);
1423 }
1424
1426 }
USB_BUS_INTERFACE_USBDI_V3 m_Usbdi
Definition: fdo.h:357
_In_ PVOID BusContext
Definition: devhcd.cpp:1395
ULONG Actual
Definition: devhcd.cpp:1400
#define ExAllocatePoolWithTag(hernya, size, tag)
Definition: env_spec_w32.h:350
#define PagedPool
Definition: env_spec_w32.h:308
PUSB_BUSIFFN_QUERY_BUS_INFORMATION QueryBusInformation
Definition: usbbusif.h:153
struct _USB_BUS_INFORMATION_LEVEL_1 * PUSB_BUS_INFORMATION_LEVEL_1

◆ RtlCopyMemory()

RtlCopyMemory ( Name->  HubName,
Info->  ControllerNameUnicodeString,
Copy   
)

◆ WdfObjectDelete() [1/2]

WdfObjectDelete ( Config->  Memory)

◆ WdfObjectDelete() [2/2]

WdfObjectDelete ( Interface->  Memory)

◆ while()

while ( !IsListEmpty &->  Interfaces)

Definition at line 1273 of file devhcd.cpp.

1274 {
1275 Entry = RemoveHeadList(&Config->Interfaces);
1276 HubChildDeleteInterface(Child, CONTAINING_RECORD(Entry, HubInterface, Link));
1277 }
#define RemoveHeadList(ListHead)
Definition: env_spec_w32.h:964

Variable Documentation

◆ Actual

ULONG Actual = 0

Definition at line 1400 of file devhcd.cpp.

Referenced by FieldMatches(), if(), PspExitProcess(), and Test_DeviceBuiltins().

◆ Buffer

◆ BusContext

◆ Child

Definition at line 1265 of file devhcd.cpp.

◆ Config

Definition at line 1266 of file devhcd.cpp.

◆ ConsumedBandwidth

Notification ConsumedBandwidth = Info->ConsumedBandwidth

Definition at line 1488 of file devhcd.cpp.

◆ ControllerNameLength

Notification ControllerNameLength = Info->ControllerNameLength

Definition at line 1489 of file devhcd.cpp.

◆ Copy

◆ else

else
Initial value:
{
Name->ActualLength = Info->ControllerNameLength
LPWSTR Name
Definition: desk.c:124
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
Definition: wdfchildlist.h:690

Definition at line 1461 of file devhcd.cpp.

◆ Entry

Definition at line 1262 of file devhcd.cpp.

Referenced by _FindPort(), FxObject::_FromDisposeEntry(), FxRequestBase::_FromDrainEntry(), FxChildList::_FromEntry(), FxIoTarget::_FromEntry(), FxTransactionedEntry::_FromEntry(), FxDeviceInterface::_FromEntry(), FxDeviceText::_FromEntry(), FxQueryInterface::_FromEntry(), FxIoQueue::_FromIoPkgListEntry(), FxIoQueueNode::_FromListEntry(), FxRequestBase::_FromListEntry(), FxIoQueue::_FromPowerSListEntry(), _HandleDeletePort(), _IRQL_requires_(), _IRQL_requires_max_(), _MmSetPageEntrySectionSegment(), _Requires_lock_held_(), FxTransactionedList::Add(), FxRelatedDeviceList::Add(), AddMonitorW(), AddNTOSInstallationItem(), AddPortExW(), AddPortW(), AddPrinterDriverExW(), AddPrinterExW(), AddPrinterW(), AddRemoteDatabaseEntry(), AfdEventReceiveDatagramHandler(), AllocateDictionaryEntry(), AllocRoutine(), DeviceMachine::AlternateSettingLeft(), Amd64SetupGdt(), AppendGenericListEntry(), ApphelpCacheDump(), ApphelpCacheLookupEntry(), ApphelpCacheParse(), ApphelpCacheQueryInfo(), ApphelpCacheRemoveEntry(), ApphelpCacheRemoveEntryNolock(), ApphelpCacheUpdateEntry(), ApphelpCacheWrite(), ArbiterLibSortArbitrationList(), ArbpBootAllocation(), ArbpBuildAllocationStack(), ArbpQueryConflict(), ArbpRetestAllocation(), ArbpReuseOwnedInterrupt(), ArbpShareDriverExclusive(), ArbpTestAllocation(), AtaDeviceFlushPowerIrpQueue(), AtaFdoDeviceListInsert(), AtaFdoFindDeviceByPath(), AtaFdoFindNextDeviceByPath(), AtaPortDeviceProcessPowerChange(), AtaPortFindDeviceForAction(), AtaReqDeviceQueueDispatchNextRequest(), AtaReqDeviceQueueInsertSrb(), AtaReqFlushDeviceQueue(), AtaReqRemovePortRequest(), AVrfDllLoadNotification(), AVrfDllUnloadNotification(), AVrfInitializeVerifier(), AVrfInternalHeapFreeNotification(), AVrfpChainDuplicateThunks(), AvrfpFindDuplicateThunk(), AVrfpIsVerifierProviderDll(), AvrfpResolveThunks(), AVrfpSnapDllImports(), BasepIsProcessAllowed(), BasepLocateExeLdrEntry(), BasepProbeForDllManifest(), BaseSrvCleanupVDMResources(), BaseSrvGetConsoleRecord(), BroadcastOpen(), XhciInterrupters::BuildLookup(), FxSystemThread::CancelWorkItem(), CcFlushImageSection(), CcIsThereDirtyData(), CcpCountCacheSections(), CcpFindMatchingMap(), CcpFindOtherStreamFileObject(), CdFspDispatch(), CdRemoveClose(), CenterCurrentListItem(), ChangeRemoteDatabaseUniqueId(), CheckSuperSpeedPlusCap(), ClassDeviceControl(), ClasspInsertCScanList(), clean_main(), FxCollectionInternal::CleanupEntry(), CleanupNamespaceProviders(), CleanupProtocolProviders(), FxCmResList::ClearRegisterResourceEntryLocked(), ClearTTFontCache(), ClockUpdate(), FxChildList::CloneEntryLocked(), CloseAllDialogWindows(), CmpAddToDelayedClose(), CmpAllocateDelayItem(), CmpDelayDerefKeyControlBlock(), CmpEnumerateOpenSubKeys(), CmpFreeDelayItem(), CmpFreeDriverList(), CmpInsertKeyHash(), CmpRemoveFromDelayedClose(), co_MsqDispatchOneSentMessage(), co_MsqSendMessage(), FxRelatedDeviceList::Compare(), FxTransactionedList::Compare(), CompareSettings(), ComputeCompatibleFormat(), CON_API(), ConfigurePortW(), ConSrvGetObject(), ConvertNtPathToWin32Path(), ATL::CAtlPlex::Create(), FxChildList::CreateDevice(), DeviceMachine::CreateEndpoints(), CreateNTOSInstallationsList(), CreateRedirectedFile(), CSR_API(), XhciInterrupters::D0ExitPreInterruptsDisabled(), DateTimePageDlgProc(), DcCancelSendPackets(), DcCreateRxRing(), DcFlushTransmitQueue(), DcFreeAdapter(), DcHandleTx(), DcProcessPendingPackets(), DECLARE_INTERFACE_(), UcxUsbDevice::DeleteFromHub(), DeleteMbrPartition(), DeleteMonitorW(), DeletePartition(), DeletePortW(), DeletePrinterDriverExW(), DeleteRemoteDatabaseEntry(), DestroyGenericList(), DestroyPartitionList(), DestroyTimeZoneList(), DestroyVolumeList(), DetailDisk(), DetailPartition(), DetailVolume(), DeviceInterruptBop(), DeviceMachine::DeviceProgrammingLost(), DeviceMachine::DisableAllEndpoints(), UcxUsbDevice::DisconnectPort(), DisconnectWorker(), DnsIntCacheAddEntry(), DnsIntCacheFlush(), DnsIntFlushCacheEntry(), DoEntry(), DoLAYOUT(), DosGetDriverNode(), DrawListEntries(), DrawPartitionList(), DriverIoControl(), DrvTestResources(), XhciIsochRing::Ed1Event(), EmsFree(), FxTransactionedList::EntryAdded(), FxRelatedDeviceList::EntryRemoved(), FxTransactionedList::EntryRemoved(), EnumMonitorsW(), EnumPortsW(), EnumPrinterDriversW(), EnumPrintersW(), EnumPrintProcessorDatatypesW(), EnumPrintProcessorsW(), EventCallback(), ExAllocatePoolWithQuotaTag(), ExAllocatePoolWithTag(), ExDeleteNPagedLookasideList(), ExDeletePagedLookasideList(), ExExtendZone(), ExFreePoolWithTag(), ExiAllocateFromPagedLookasideList(), ExiFreeToPagedLookasideList(), ExInitializeZone(), ExInitPoolLookasidePointers(), ExitThreadCallback(), ExpAddTagForBigPages(), ExpAllocateHandleTableEntry(), ExpCheckPoolAllocation(), ExpCheckPoolBlocks(), ExpCheckPoolHeader(), ExpCheckPoolIrqlLevel(), ExpFindAndRemoveTagBigPages(), ExpInsertPoolHeadList(), ExpInsertPoolTailList(), ExpLookupHandleTableEntry(), ExpRemovePoolEntryList(), ExpRemovePoolHeadList(), ExpRemovePoolTailList(), ExReturnPoolQuota(), UcxUsbDevice::FanOutToEndpoints(), FAT12CountAvailableClusters(), FAT12FindAndMarkAvailableCluster(), FAT12GetNextCluster(), FatBufferDirectory(), FatFspDispatch(), FatInterpretClusterType(), FatRemoveOverflowEntry(), FDO_HandleResetCyclePort(), FileTypesDlg_InsertToLV(), fill_in_hard_link_full_id_information(), fill_in_hard_link_information(), XhciRootHub::FillSpeeds(), FindBestFontFromList(), FindBootDisplayFromLoaderARCTree(), FindCachedTTFont(), FindComSpecInfoByPsp(), FindExistingNTOSInstall(), FindMatchingCreateItem(), HubFdo::FindPort(), FindPort(), FindPrintMonitor(), FindPrintProcessor(), FindRemoveEventMsg(), XhciIsochRing::FinishLostStages(), FlsFree(), FlushConnectQueue(), FlushListenQueue(), FlushReceiveQueue(), FlushSendQueue(), FlushShutdownQueue(), FontLink_Chain_Dump(), FontLink_Chain_FindGlyph(), FontLink_Chain_FindLink(), FontLink_DeleteEntries(), FontLink_FindEntry(), for(), FreeDictionaryEntry(), FreeFilterInstance(), FreeLogFilterList(), FreeLogicalDevice(), FreeLogList(), FreeNtToWin32PathMappingList(), FreeRoutine(), FreeSegmentPage(), FsdSetFsLabelInformation(), FsRtlDeleteTunnelCache(), FsRtlFastUnlockAll(), FsRtlFastUnlockAllByKey(), FsRtlFastUnlockSingle(), FsRtlGetNextFileLock(), FsRtlpRebuildSharedLockRange(), FsRtlPruneTunnelCache(), FsRtlUninitializeFileLock(), FsRtlWorkerThread(), FstubCopyEntryEFI(), FstubWritePartitionTableEFI(), FsVolCommitOpsQueue(), FxAllocateFromNPagedLookasideList(), FxAllocateFromNPagedLookasideListNoTracking(), FxAllocateFromPagedLookasideList(), FxFreeToNPagedLookasideList(), FxFreeToNPagedLookasideListNoTracking(), FxFreeToPagedLookasideList(), GdiFixUpHandle(), GdiGetHandleUserData(), GdiValidateHandle(), CPortPinWaveCyclic::GeneratePositionEvents(), FxChildList::GetAddressDescriptionFromEntry(), GetAppName(), GetConsoleRecordBySessionId(), GetDialogListEntry(), GetDiskByBiosNumber(), GetDiskByNumber(), GetDiskBySCSI(), GetDiskBySignature(), GetDiskForVolume(), GetFileTypeIconsByKey(), GetFileTypeIconsEx(), GetFilterInstanceEntry(), GetFirstListEntry(), GetFontFamilyInfoForList(), GetFreeDiskSize(), GetLargerTimeZoneEntry(), CIconWatcher::GetListEntry(), GetListEntry(), GetListEntryData(), GetListEntryUiData(), GetLogicalPage(), GetModuleFileNameW(), GetNextDosSesId(), FxRelatedDeviceList::GetNextEntry(), FxTransactionedList::GetNextEntry(), FxTransactionedList::GetNextEntryLocked(), GetNextFreeVDDEntry(), GetNextListEntry(), GetNextUnformattedVolume(), GetNTOSInstallationName(), GetPartition(), GetPartitionCount(), GetPinInstanceCount(), GetPrimaryPartitionCount(), GetPrinterDriverDirectoryW(), GetPrintProcessorDirectoryW(), GetProgramPath(), GetProtoGetNextEnt(), GetRemoteDatabaseEntry(), GetSelectedTimeZoneEntry(), GetSettingDescription(), getShellClassInfo(), GetSystemDisk(), GetTimeZoneEntryByIndex(), GetTypeName(), GetVolumeFromPartition(), GetXmsHandleRecord(), HaliReadMPConfigTable(), HalpBuildPartialFromIdt(), HalpIsValidPartitionEntry(), HalpMadtParseEntries(), HalpStoreAndClearIopm(), UcxUsbDevice::HandleHubTreePurge(), HandlePhysicalConnection(), HandleSysAudioFilterPinProperties(), HasDaylightSaving(), HasDaylightSavingTime(), HfontCreate(), HidClass_Close(), HistoryAddEntry(), HistoryCurrentBuffer(), HistoryFindBuffer(), HistoryFindEntryByPrefix(), HistoryGetCurrentEntry(), HistoryRecallHistory(), HistoryReshapeAllBuffers(), HubChildHasNonControlPipe(), HubChildU1FromPipes(), HubChildU2FromPipes(), HubClearListEntry(), HubConfigCheckDuplicates(), HubConfigHasEndpointZero(), HubConfigMovePipes(), HubConnectorFindById(), HubConnectorFindByPort(), HubFindPipeByHandle(), HubFreeConfiguration(), HubIoGetConnectionInformation(), HubIsListEntryLinked(), HubTtClearValue(), HubWmiQueryHubNode(), IniCacheDestroy(), IniCacheFindKey(), IniCacheFindSection(), IniCacheFreeSection(), IniFindFirstValue(), IniFindNextValue(), IniGetSettingByNumber(), IniModifySettingValue(), IniOpenSection(), IniReadSettingByName(), InitGenericComboList(), InitGenericListView(), InitializeMemoryManagement(), InitializePortList(), InitPaletteWithTable(), InsertAfterEntry(), InsertDiskRegion(), InsertHeadList(), InsertTailList(), IntCreateAliasEntry(), IntCreateAliasHeader(), IntDeleteAliasEntry(), IntDeleteAllAliases(), IntDeleteAllContexts(), InternalGetListRemovalHandledFlag(), InternalWake(), IntGdiCleanupMemEntry(), IntGdiCleanupPrivateFontsForProcess(), IntGdiLoadFontsFromMemory(), IntGdiReleaseRaoRgn(), IntGdiRemoveFontMemResource(), IntGetAliasEntry(), IntGetLoadedCodePageEntry(), IntGetNextPowerCallout(), IntNeedRequestFontSize(), IntRebaseList(), IntRegisterShellHookWindow(), IntSendSyncPaint(), IntVideoPortMapMemory(), IntVideoPortResetDisplayParametersEx(), IntVideoPortUnmapMemory(), IOAPICClearPin(), IOAPICMaskIrq(), IOAPICUnmaskIrq(), IopReinitializeBootDrivers(), IopReinitializeDrivers(), IopStartNextPacket(), IopStartNextPacketByKey(), IoRegisterFsRegistrationChange(), IoRegisterLastChanceShutdownNotification(), IoRegisterPlugPlayNotification(), IoRegisterShutdownNotification(), IoUnregisterPlugPlayNotification(), IsaFdoRemoveDevice(), IsaPdoQueryId(), IsaPnpRemoveLogicalDeviceDO(), IsaReadPortRemoveDevice(), IsBlockFromHeap(), IsThereAChildOpened(), kbd_c(), KdbpAttachToProcess(), KdbpCmdProc(), KdbpCmdThread(), KeInsertHeadQueue(), KeInsertQueue(), KeQueryInterruptHandler(), KeRegisterInterruptHandler(), KeSetBaseGdtSelector(), KeSetGdtSelector(), KeTerminateThread(), KiDoBugCheckCallbacks(), KiGetGdtDescriptorBase(), KiGetVectorDispatch(), KiInitGdtEntry(), KiInitializeKernel(), KiInitModuleList(), KiInitSystem(), KiInsertQueue(), KiPcToFileHeader(), KiRosPcToUserFileHeader(), KiSetGdtDescriptorBase(), KiSetGdtDescriptorLimit(), KiSetGdtEntry(), KiSetGdtEntryEx(), KmtCleanUsermodeCallbacks(), KsCancelIo(), KsCopyObjectBagItems(), KsCreateBusEnumObject(), KsFilterFactoryGetSymbolicLink(), KsFilterFactoryUpdateCacheData(), KsFreeObjectBag(), KspAddCreateItemToList(), KspAddObjectCreateItemToList(), KspBusWorkerRoutine(), KspCompletePendingIrps(), KspCreateDeviceAssociation(), KspCreateDeviceReference(), KspDisableEvent(), KspEnableBusDeviceInterface(), KspFindObjectBagItem(), KspFreeCreateItems(), KspFreeDeviceInterfaces(), KspFreeEventList(), KspGetObjectItemReferenceCount(), KspInstallBusEnumInterface(), KspQueryBusRelations(), KspRemoveDeviceAssociations(), KspSetDeviceInterfacesState(), KspSetFilterFactoriesState(), KsServiceBusEnumCreateRequest(), LdrpClearLoadInProgress(), LdrpCompareResourceNames_U(), LdrpFinalizeAndDeallocateDataTableEntry(), LdrpGetProcedureAddress(), LdrpSendDllNotifications(), LdrpUpdateLoadCount3(), LdrQueryProcessModuleInformationEx(), LdrUnregisterDllNotification(), LibTCPDequeuePacket(), LibTCPEmptyQueue(), LineInputKeyDown(), LineInputRecallHistory(), ListDisk(), ListPartition(), ListVolume(), LlbAllocateMemoryEntry(), LocalEnumMonitors(), LocalEnumPorts(), LocalmonEnumPorts(), LocalmonShutdown(), LpcpDeletePort(), LpcpDestroyPortQueue(), LpcpFindDataInfoMessage(), LpcpFreeDataInfoMessage(), LsapEnumLogonSessions(), LsapGetAuthenticationPackage(), LsapGetLogonSession(), LsapGetNotificationEntry(), LsapLookupAuthenticationPackage(), LsapNotifyPolicyChange(), LsapTerminateLogon(), HubFdo::MarkDevicesProgrammingLost(), MemCleanup(), MemInstallFastMemoryHook(), MempAllocatePTE(), MempSetupPaging(), MempUnmapPage(), MiCacheEvictPages(), MiFreeSegmentPage(), MiInsertInSystemSpace(), MiniportHandleInterrupt(), MiProtectedPoolInsertList(), MiProtectedPoolRemoveEntryList(), MiPurgeImageSegment(), MiRemoveFromSystemSpace(), MiRosTrimCache(), MiShutdownSystem(), MiUnlinkFreeOrZeroedPage(), MmAccessFaultSectionView(), MmAllocateSpecialPool(), MmAlterViewAttributes(), MmFlushSegment(), MmFreeCacheSectionPage(), MmFreeLoaderBlock(), MmFreePageTablesSectionSegment(), MmFreeSectionPage(), MmFreeSwapPage(), MmGetPageProtect(), MmGetPageTableForProcess(), MmGetPageTableForProcessForPAE(), MmGetPfnForProcess(), MmGetPhysicalMemoryRanges(), MmIsDataSectionResident(), MmIsPageSwapEntry(), MMixerGetDataByDeviceId(), MMixerGetDataByDeviceName(), MMixerGetLineControls(), MMixerGetMidiInfoByIndexAndType(), MMixerGetMixerByName(), MMixerGetMixerControlById(), MMixerGetMixerDataByDeviceHandle(), MMixerGetMixerInfoByIndex(), MMixerGetMixerLineContainingNodeId(), MMixerGetSourceMixerLineByComponentType(), MMixerGetSourceMixerLineByLineId(), MMixerGetWaveInfoByIndexAndType(), MMixerInitialize(), MMixerNotifyControlChange(), MMixerPrintMixerLineControls(), MMixerRemoveEvent(), MmMakeSegmentDirty(), MmMakeSegmentResident(), MmNotPresentFaultSectionView(), MmPageOutCacheSection(), MmPageOutPhysicalAddress(), MmpFreePageFileSegment(), MmPurgeSegment(), MmSharePageEntrySectionSegment(), MmTrimUserMemory(), MmUnsharePageEntrySectionSegment(), MmWithdrawSectionPage(), MountMgrQueryDosVolumePaths(), MountMgrQueryVolumePaths(), MountMgrVolumeMountPointDeleted(), MsfsRead(), MupCheckForUnregisteredProvider(), MupCleanupFcb(), MupForwardIoRequest(), MupInvalidatePrefixTable(), nfs41_DevFcbXXXControlFile(), NlsUninit(), Normalize(), DeviceMachine::NotifyDeviceReset(), NpFindPrefix(), NSProviderInfoFromContext(), NSProvidersEnumerationProc(), NtfsCheckRenamePaths(), NtfsFlushVolumeFiles(), NtfsRenameFcbs(), NtGetPlugPlayEvent(), NtLdrDetectBootVid(), NtQueryDirectoryObject(), NtReplyWaitReceivePortEx(), NtUserGetRawInputBuffer(), ObpDeferObjectDeletion(), XhciCommandRing::OnCompletionEvent(), OpenPrinterW(), UcxEndpoint::OpenStaticStreamsComplete(), EndpointMachine::ParkAsStale(), HubMachine::ParseDromIdentity(), Pc98VidSetColorRegisters(), PcCreateItemDispatch(), PcCreatePinDispatch(), PciBuildHackTable(), PciFdoIrpRemoveDevice(), PciFreeBusSecondaryExtensions(), PciGetDescriptionMessage(), PciGetResizableBarCapability(), PciInsertEntryAtHead(), PcIoTimerRoutine(), PcNewRegistryKey(), PcRegisterIoTimeout(), PcUnregisterIoTimeout(), PeLdrFreeDataTableEntry(), PiDereferencePnpNotifyEntry(), PiPropFindSaved(), PiReferencePnpNotifyEntry(), PopCircularBufferEntry(), PortCompletionDpc(), PortDeleteDriverInitData(), PortGetDriverInitData(), PortScheduleComingRequestsOnCompletion(), PortStarvedCsqPeekNextIrp(), HubFdo::PostToAllPorts(), DeviceMachine::PrepareConfigLists(), PrepareCopyInfFile(), DeviceMachine::PrepareInterfaceLists(), DeviceMachine::PrepareListsForReset(), XhciInterrupters::PrepareOne(), FxTransactionedList::ProcessAdd(), ProtocolEnumerationProc(), ProviderEnumerationProc(), PsGetNextProcessEx(), PsGetNextProcessThread(), PspGetNextProcessInJobLocked(), PushCircularBufferEntry(), PushEntryList(), PushEntryListWrapper(), HubFdo::QueueFakeStatusChangeToPorts(), HubFdo::QueuePowerDownToDevices(), HubFdo::QueuePowerUpToDevices(), HubFdo::QueuePowerUpToPorts(), HubFdo::QueueResetToPorts(), HubFdo::QueueStatusChangeToPorts(), HubFdo::QueueStopToPorts(), HubFdo::QueueSuspendToPorts(), RawInputEntryFromHandle(), ReadVolumeLabel(), ReconcileThisDatabaseWithMasterWorker(), FxChildList::ReenumerateEntry(), FxChildList::ReenumerateEntryLocked(), XhciTransferRing::ReferenceLiveRing(), RegisterConnection(), RegisterUncProvider(), RegShutdownRegistry(), XhciInterrupters::ReleaseOne(), FxTransactionedList::Remove(), RemoveCachedEntry(), FxCollectionInternal::RemoveEntry(), RemoveEntryList(), RemoveEntryListUnsafe(), RemoveHeadList(), FxTransactionedList::RemoveLocked(), RemoveTailList(), RetrieveTimeZone(), XhciTransferRing::ReturnSegments(), routeintrf_FindDevice(), rsym_parse(), RtlAddAtomToAtomTable(), RtlAddRange(), RtlCopyRangeList(), RtlDeleteAtomFromAtomTable(), RtlDeleteOwnersRanges(), RtlDeleteRange(), RtlDestroyHeap(), RtlFindUnicodePrefix(), RtlFreeRangeList(), RtlGetFirstRange(), RtlGetLastRange(), RtlGetNextRange(), RtlInsertUnicodePrefix(), RtlInvertRangeListEx(), RtlLookupAtomInAtomTable(), RtlNextUnicodePrefix(), RtlpAllocAtomTableEntry(), RtlpCheckListEntry(), RtlpConflictsOnAdd(), RtlpCreateAtomHandle(), RtlpCreateUnCommittedRange(), RtlPcToFileHeader(), RtlpFreeAtomHandle(), RtlpFreeAtomTableEntry(), RtlpGetAtomEntry(), RtlPinAtomInAtomTable(), RtlpIsLastCommittedEntry(), RtlpValidateHeap(), RtlpWindowIsAvailable(), RtlQueryAtomInAtomTable(), RtlRemoveUnicodePrefix(), RxCancelNotifyChangeDirectoryRequestsForFobx(), RxCancelNotifyChangeDirectoryRequestsForVNetRoot(), RxCancelRoutine(), RxFinalizeConnection(), RxFinalizeNetFcb(), RxGatherRequestsForSrvOpen(), RxIsOkToPurgeFcb(), RxOrphanSrvOpens(), RxpDiscardChangeBufferingStateRequests(), RxpDispatchChangeBufferingStateRequests(), RxpLookupSrvOpenForRequestLite(), RxpScavengeFobxs(), RxPurgeRelatedFobxs(), RxRemoveOverflowEntry(), RxRemovePrefixTableEntry(), RxScavengeFobxsForNetRoot(), RxTableLookupName(), RxTableLookupName_ExactLengthMatch(), ScanForUnpartitionedDiskSpace(), ScanForUnpartitionedGptDiskSpace(), ScanForUnpartitionedMbrDiskSpace(), ScrollDownGenericList(), ScrollToPositionGenericList(), ScrollUpGenericList(), ScsiPortDispatchScsi(), SeiResetEntryProcessed(), SeiSetEntryProcessed(), DeviceMachine::SelectConfigValid(), SelectDisk(), SelectPartition(), SelectVolume(), DeviceMachine::SetConfigInfoInRequest(), SetCurrentListEntry(), DeviceMachine::SetInterfaceInfoInRequest(), SetLocalTimeZone(), SetMountedDeviceValues(), SetPortW(), UcxStaticStreams::SetStreamInfo(), SetupCloseFileQueue(), SetupCommitFileQueueW(), SetupDeleteQueueEntry(), SetupQueueCopyWithCab(), SetupQueueDeleteW(), SetupQueueRenameW(), ShimLib_NotifyShims(), ShowTimeZoneList(), SmpCheckDuplicateMuSessionId(), SmpCreatePagingFileDescriptor(), SmpCreatePagingFileOnAnyDrive(), SmpCreatePagingFiles(), SmpFindRegistryValue(), SmpInitializeDosDevices(), SmpInitializeKnownDlls(), SmpInitializeKnownDllsInternal(), SmpLoadDataFromRegistry(), SmpLoadDeferedSubsystem(), SmpLoadSubSystemsForMuSession(), SmpLocateKnownSubSysByCid(), SmpLocateKnownSubSysByType(), SmpProcessFileRenames(), SmpSaveRegistryValue(), SmpSearchVolumeDescriptor(), SmpSessionIdToSession(), SortVolumeList(), SpiGetNextRequestFromLun(), START_TEST(), StorpInterlockedInsertHeadListCounted(), StorpInterlockedInsertTailListCounted(), StorpInterlockedRemoveEntryListCounted(), StorpInterlockedRemoveHeadListCounted(), StorpInterlockedRemoveTailListCounted(), StorPortExtendedFunction(), StreamClassReleaseResources(), sys_arch_mbox_fetch(), SysAudio_Shutdown(), SysAudioHandleProperty(), SysAudioOpenVirtualDevice(), TCPAbortListenForSocket(), TCPAcceptEventHandler(), TCPConnectEventHandler(), TCPRecvEventHandler(), TCPRemoveIRP(), TCPSendEventHandler(), Test_FontSelectionEntry(), Test_GetFiles(), Test_GetFontResourceInfoW_case0(), Test_GetFontResourceInfoW_case1(), Test_GetFontResourceInfoW_case2(), test_table(), ThirdPartyVDDBop(), UcxUsbDevice::TrackStaleHandles(), TrimWsList(), UcxAnyUsbdHandleHasVerifier(), UcxClearListEntry(), UcxClientSelectConfigXrbBuild(), UcxCollectEndpointsForReset(), UcxDisconnectVisitor(), UcxDropLeakedUsbdHandles(), UcxIsListEntryLinked(), UcxPostToCollectedEndpoints(), UcxTreePurgeVisitor(), UcxValidatePipeHandle(), UDFCloseAllDelayed(), UDFCommonDispatch(), UDFDelayedClose(), UmaDescReallocate(), UmaDescRelease(), UmaDescReserve(), UmaMgrCleanup(), FxChildList::UpdateAddressDescriptionFromEntry(), UpdateAutoDaylightCheckbox(), UpdateDiskSignatures(), UpdateDstCheckbox(), FxCmResList::UpdateRegisterResourceEntryLocked(), UpdateRegistry(), USB2_Rebalance(), USB2_RebalanceEndpoint(), USBCCGP_PDOSelectConfiguration(), USBD_AddDeviceToGlobalList(), UsbdexBuildSelectConfigUrb(), UsbdFindSerialRecordByDevice(), USBH_FdoQueryBusRelations(), USBH_FlushPortPwrList(), USBPORT_CancelActiveTransferIrp(), USBPORT_DmaEndpointActive(), USBPORT_DmaEndpointPaused(), USBPORT_DpcHandler(), USBPORT_EndpointHasQueuedTransfers(), USBPORT_FindCompanionControllers(), USBPORT_FlushAbortList(), USBPORT_FlushAllEndpoints(), USBPORT_FlushController(), USBPORT_GetTt(), USBPORT_InvalidateEndpointHandler(), USBPORT_MiniportCompleteTransfer(), USBPORT_RH_SetFeatureUSB2PortPower(), USBPORT_RootHubPowerAndChirpAllCcPorts(), USBPORT_SynchronizeRootHubCallback(), USBSTOR_RemoveIrp(), UserDerefObjectCo(), UserDestroyObjectsForOwner(), UserpGetClientFileName(), VBESetColorRegisters(), VDDBlockUserHook(), VDDCreateUserHook(), VDDDeInstallUserHook(), VDDInstallMemoryHook(), VDDResumeUserHook(), VDDTerminateUserHook(), verify_mru_(), FxChildList::VerifyDescriptionEntry(), FxChildList::VerifyModificationEntry(), VfatCloseWorker(), VfatRenameChildFCB(), VgaWriteAc(), VgaWriteDac(), VideoPortFreeCommonBuffer(), VideoPortGetCommonBuffer(), UcxUsbDevice::WalkSubtree(), WdmAudGetMixerEvent(), WdmAudOpenSysAudioDeviceInterfaces(), WdmAudOpenSysAudioDevices(), while(), WhoamiSetTable(), WhoamiSetTableDyn(), WorkerThread(), WorkItemRoutine(), WPUModifyIFSHandle(), WPUQueryBlockingCallback(), WritePartitionsToDisk(), WriteRemoteDatabaseEntry(), WsAsyncCancelRequest(), WsAsyncThread(), WsNcDelete(), WsNcEntrySetProvider(), WsNcEnumerateCatalogItems(), WsNcGetCatalogFromProviderId(), WsNcRefreshFromRegistry(), WsNcRemoveCatalogItem(), WsNcUpdateNamespaceList(), WsNqBeginEnumerationProc(), WsNqDelete(), WsNqLookupServiceBegin(), WsNqLookupServiceEnd(), WsNqLookupServiceNext(), WsNqNextProvider(), WsNqPreviousProvider(), WsTcDelete(), WsTcEntrySetProvider(), WsTcEnumerateCatalogItems(), WsTcFindIfsProviderForSocket(), WsTcFindProvider(), WsTcGetEntryFromAf(), WsTcGetEntryFromCatalogEntryId(), WsTcGetEntryFromTriplet(), WsTcRefreshFromRegistry(), WsTcRemoveCatalogItem(), WsTcUpdateProtocolList(), xHalIoReadPartitionTable(), xHalIoSetPartitionInformation(), xHalIoWritePartitionTable(), XhciAdvanceDequeue(), XhciBulkStageBytes(), XhciBulkStageContains(), XhciClearListEntry(), XhciCmdFromLink(), XhciDequeueTrb(), XhciDispatchEvent(), XhciEventPending(), XhciEvtInterruptDisable(), XhciEvtInterruptDpc(), XhciEvtInterruptEnable(), XhciEvtInterruptIsr(), XhciEvtRequeueWorkItem(), XhciIsListEntryLinked(), XhciIsochCountList(), XhciIsochIsActive(), XhciIsochStageHas(), XhciProgramEventRing(), XhciReadInterrupter(), XhciRequeueEvents(), XhciResetEventRing(), XhciRingCountList(), XhciRouteTransferEvent(), XhciSlotDevice(), XhciStreamsSize(), XhciUnmaskInterrupter(), XhciWriteDequeue(), XhciWriteInterrupter(), XhciWriteInterrupter64(), and XhciSlotTable::ZeroScratchpads().

◆ HubChildClientRequestComplete

EVT_WDF_REQUEST_COMPLETION_ROUTINE HubChildClientRequestComplete
static

Definition at line 51 of file devhcd.cpp.

Referenced by HubChildForwardToController().

◆ HubChildUcxIoctlComplete

EVT_WDF_REQUEST_COMPLETION_ROUTINE HubChildUcxIoctlComplete
static

Definition at line 50 of file devhcd.cpp.

Referenced by HubChildSubmitUcxIoctl().

◆ Index

◆ Interface

Initial value:
{
HubFdo* Hub = Child->m_Hub
Definition: fdo.h:132

Definition at line 1233 of file devhcd.cpp.

Referenced by HubConfigMovePipes().

◆ Irql

Definition at line 1263 of file devhcd.cpp.

◆ Length

Definition at line 1399 of file devhcd.cpp.

◆ Notification

◆ Pdo

Initial value:
{
HubFdo* Hub = Child->m_Hub

Definition at line 1381 of file devhcd.cpp.

◆ Pipe

Definition at line 1236 of file devhcd.cpp.

◆ Result

* Result
Initial value:

Definition at line 1396 of file devhcd.cpp.

Referenced by HubChildComputeLpm20().

◆ Slot

◆ Status

return Status = Hub->m_Usbdi.QueryBusInformation(BusContext, 1, Buffer, &Length, &Actual)

◆ TotalBandwidth

Notification TotalBandwidth = Info->TotalBandwidth

Definition at line 1487 of file devhcd.cpp.