15#define XFER_STD_TO_DEVICE 0x00
16#define XFER_STD_TO_INTERFACE 0x01
17#define XFER_STD_TO_ENDPOINT 0x02
18#define XFER_STD_FROM_DEVICE 0x80
19#define XFER_VENDOR_TO_DEVICE 0x40
20#define XFER_VENDOR_FROM_DEVICE 0xC0
21#define XFER_VENDOR_FROM_INTERFACE 0xC1
22#define XFER_CLASS_FROM_PORT 0xA3
25#define XFER_TYPE(RequestType) (((RequestType) >> 5) & 3)
26#define XFER_TYPE_STANDARD 0
27#define XFER_TYPE_VENDOR 2
30#define XFER_HEADER_READ 255
33#define XFER_EXT_PROPERTIES_HEADER 10
36#define XFER_SERIAL_LANGUAGE 0x0409
39#define XFER_FUNCTION_SUSPEND_WAKE 0x0300
42#define XFER_LOW_POWER_PORT 100
83 if (Billboard ==
NULL)
144 DPRINT(
"Device %p port %u request 0x%02x/0x%02x value 0x%04x failed 0x%lx usbd 0x%lx\n",
149 DPRINT1(
"Device %p port %u request 0x%02x/0x%02x value 0x%04x index 0x%04x failed 0x%lx usbd 0x%lx\n",
162 Child->m_LastUsbdStatus = UrbStatus;
249 Child->m_Control.UsbdFlags = 0;
254 Child->m_Control.Reuse();
277 Child->m_NeedsForwardProgress);
281 Child->m_Control.UsbdFlags = 0;
357 Child->m_ScratchBuffer,
429 DPRINT1(
"Device %p transfer not canceled, already completed\n",
m_Device);
444 Child->m_ScratchBuffer,
461 Child->Post(DsmEvent::TransferFailed);
491 Child->Post(DsmEvent::TransferFailed);
507 Child->m_DualRoleRequestCode,
514 Child->SetState(ChildState::DualRoleCommandSent);
527 DPRINT1(
"Device %p has no billboard to read the URL string of\n",
Child);
528 Child->Post(DsmEvent::TransferFailed);
544 DPRINT1(
"Device %p has no alternate mode string to read\n",
Child);
545 Child->Post(DsmEvent::TransferFailed);
560 Child->Post(DsmEvent::TransferFailed);
579 if (
Child->m_DeviceDescriptor.iProduct == 0 &&
Child->HasHack(ChildHack::DisableSerialNumber))
581 DPRINT(
"Device %p has no product string\n",
Child);
582 Child->Post(DsmEvent::TransferFailed);
596 if (
Child->m_DeviceDescriptor.iSerialNumber == 0)
598 DPRINT(
"Device %p has no serial number string\n",
Child);
599 Child->Post(DsmEvent::TransferFailed);
672 DPRINT1(
"Device %p no memory for a %lu byte extended configuration\n",
Child,
Length);
673 Child->Post(DsmEvent::TransferFailed);
699 DPRINT1(
"Device %p has no extended properties buffer\n",
Child);
700 Child->Post(DsmEvent::TransferFailed);
717 Child->m_MsOs20SetLength = 0;
723 Child->Post(DsmEvent::TransferFailed);
727 Child->m_MsOsVendorCode =
Child->m_MsOs20SetInfo.bVendorCode;
741 Child->m_MsOsVendorCode,
742 (
USHORT)(
Child->m_MsOs20SetInfo.bAltEnumCode << 8),
761 DPRINT1(
"Device %p has no configuration to select\n",
Child);
762 Child->Post(DsmEvent::TransferFailed);
769 Child->m_CurrentConfig->Descriptor.bConfigurationValue,
813 DPRINT(
"Device %p has no alternate setting left to select\n",
Child);
814 Child->Post(DsmEvent::TransferDone);
820 Interface->Descriptor->bAlternateSetting,
828 Child->Post(DsmEvent::TransferFailed);
839 DPRINT1(
"Device %p clear halt on an unknown pipe\n",
Child);
842 Child->Post(DsmEvent::TransferFailed);
850 Pipe->Descriptor->bEndpointAddress,
999 *
Link =
max(DeviceLatency, UpstreamLatency);
1000 Path = (
USHORT)(SlowestLatency + ((
Depth - SlowestDepth) * 1000 + 500) / 1000);
1027 Parent->SlowestLinkU1ExitLatency,
1028 Parent->SlowestLinkU1Depth,
1031 &
Child->m_SlowestLinkU1);
1035 Parent->SlowestLinkU2ExitLatency,
1036 Parent->SlowestLinkU2Depth,
1039 &
Child->m_SlowestLinkU2);
1041 Child->m_HostU1ExitLatency = (
USHORT)(
Parent->HostInitiatedU1ExitLatency + LinkU1 + DecodeLatency);
1042 Child->m_HostU2ExitLatency = (
USHORT)(
Parent->HostInitiatedU2ExitLatency + LinkU2 + DecodeLatency);
1048 Erdy = ((
Depth + 1) * LinkDelay + 800 *
Depth + 2200) / 1000;
1051 Child->m_Sel.U1Pel = PelU1;
1052 Child->m_Sel.U1Sel = (
UCHAR)(PelU1 + Erdy + 5);
1053 Child->m_Sel.U2Pel = PelU2;
1062 sizeof(
Child->m_Sel),
1076 Child->m_TxTpDelay);
1100 DPRINT1(
"Device %p descriptor read for the hub failed 0x%lx\n",
Child,
Params->IoStatus.Status);
1118 Stack.Parameters.Others.Argument1 = &
Queue->Urb;
1119 WdfRequestWdmFormatUsingStackLocation(
Request, &
Stack);
1126 DPRINT1(
"Device %p descriptor read for the hub not sent 0x%lx\n",
Child, WdfRequestGetStatus(
Request));
1127 Child->Post(DsmEvent::TransferFailed);
1156HubReadPortStatusForBootDevice(
1188 Child->m_Port->Number(),
1201 DPRINT1(
"Port %u boot status read not sent 0x%lx\n",
Child->m_Port->Number(),
Status);
1205 HubWaitForPnpEvent(&
Done,
"boot device port status",
Child->m_Object);
ACPI_PHYSICAL_ADDRESS ACPI_SIZE BOOLEAN Warn UINT32 *TableIdx UINT32 ACPI_TABLE_HEADER *OutTableHeader ACPI_TABLE_HEADER **OutTable ACPI_HANDLE UINT32 ACPI_WALK_CALLBACK ACPI_WALK_CALLBACK void void **ReturnValue UINT32 ACPI_BUFFER *RetPathPtr ACPI_OBJECT_HANDLER void *Data ACPI_OBJECT_HANDLER void **Data ACPI_STRING ACPI_OBJECT_LIST ACPI_BUFFER *ReturnObjectBuffer ACPI_DEVICE_INFO **ReturnBuffer ACPI_HANDLE ACPI_HANDLE ACPI_HANDLE *OutHandle ACPI_HANDLE *OutHandle void *Context void *Context ACPI_EVENT_HANDLER Handler UINT32 UINT32 ACPI_GPE_HANDLER void *Context UINT32 ACPI_NOTIFY_HANDLER void *Context ACPI_ADR_SPACE_TYPE ACPI_ADR_SPACE_HANDLER ACPI_ADR_SPACE_SETUP Setup
ACPI_PHYSICAL_ADDRESS ACPI_SIZE BOOLEAN Warn UINT32 *TableIdx UINT32 ACPI_TABLE_HEADER *OutTableHeader ACPI_TABLE_HEADER **OutTable ACPI_HANDLE UINT32 ACPI_WALK_CALLBACK ACPI_WALK_CALLBACK void void **ReturnValue UINT32 ACPI_BUFFER *RetPathPtr ACPI_OBJECT_HANDLER void *Data ACPI_OBJECT_HANDLER void **Data ACPI_STRING ACPI_OBJECT_LIST ACPI_BUFFER *ReturnObjectBuffer ACPI_DEVICE_INFO **ReturnBuffer ACPI_HANDLE Parent
_In_ ULONG const _In_ FEATURE_NUMBER const Feature
VOID ReadFullConfigDescriptor()
VOID ReadBillboardString()
VOID SendAltEnumCommand()
VOID ReadMsOsDescriptor()
VOID ReadExtendedConfig()
VOID ReadFirstDescriptor()
VOID SetNullConfiguration()
VOID ReadConfigDescriptorHeader()
VOID SetPdChargingPolicy()
VOID GetDescriptorForHub()
VOID ReadExtPropertiesHeader()
VOID ReadDeviceDescriptor()
VOID ReadExtendedConfigHeader()
SM_RESULT Delay(_In_ DSM_DELAY Kind, _In_ DSM_NEXT Next)
VOID ReadContainerIdHeader()
BOOLEAN AlternateSettingLeft()
HubMsOsExtConfig * m_MsOsExtConfig
PUSB_STRING_DESCRIPTOR m_LanguageIds
UCHAR m_ScratchBuffer[256]
HubInterface * m_NextInterface
HubMsOs20SetInfo m_MsOs20SetInfo
HubControlRequest m_Control
HubMsOsString m_MsOsString
USB_DEVICE_QUALIFIER_DESCRIPTOR m_Qualifier
HubConfiguration * m_CurrentConfig
VOID SetState(_In_ ChildState Flag)
WDFIOTARGET m_RootHubTarget
UCXUSBDEVICE UsbDevice() const
HubParentInfo m_ParentInfo
USB_30_HUB_DESCRIPTOR Usb30
UCXHUB_PARENT_INTERFACE m_Parent
union HubFdo::@1628 m_HubDescriptor
VOID NTAPI HubFreeBillboardInfo(_In_ HubChild *Child)
_In_ BOOLEAN _In_ ULONG Features
#define XFER_LOW_POWER_PORT
#define XFER_STD_TO_ENDPOINT
static EVT_WDF_REQUEST_COMPLETION_ROUTINE HubDeviceControlComplete
static VOID NTAPI HubDeviceGetString(_In_ HubChild *Child, _In_ UCHAR Index, _In_ USHORT LanguageId)
#define XFER_TYPE_STANDARD
#define XFER_STD_TO_DEVICE
static VOID NTAPI HubDeviceFeature(_In_ HubChild *Child, _In_ BOOLEAN Set, _In_ USHORT Feature)
static BOOLEAN NTAPI HubDeviceRequest(_In_ HubChild *Child, _In_ UCHAR RequestType, _In_ UCHAR Request, _In_ USHORT Value, _In_ USHORT Index, _In_reads_bytes_opt_(Length) PVOID Buffer, _In_ ULONG Length, _In_ BOOLEAN ShortTransferOk)
#define XFER_STD_TO_INTERFACE
static VOID NTAPI HubDeviceStringFailed(_In_ HubChild *Child, _In_ UCHAR Index)
#define XFER_EXT_PROPERTIES_HEADER
#define XFER_VENDOR_FROM_DEVICE
static VOID NTAPI HubDeviceMsOsRead(_In_ HubChild *Child, _In_ UCHAR RequestType, _In_ USHORT Index, _Out_writes_bytes_(Length) PVOID Buffer, _In_ ULONG Length)
#define XFER_SERIAL_LANGUAGE
static VOID NTAPI HubDeviceGetDescriptor(_In_ HubChild *Child, _In_ UCHAR Type, _In_ UCHAR Index, _In_ USHORT LanguageId, _Out_writes_bytes_(Length) PVOID Buffer, _In_ ULONG Length)
#define XFER_VENDOR_TO_DEVICE
BOOLEAN NTAPI HubDeviceSend(_In_ HubChild *Child, _In_reads_bytes_opt_(Length) PVOID Buffer, _In_ ULONG Length, _In_ BOOLEAN ShortTransferOk)
static USHORT NTAPI HubSelPathLatency(_In_ USHORT DeviceLatency, _In_ USHORT UpstreamLatency, _In_ USHORT SlowestLatency, _In_ UCHAR SlowestDepth, _In_ LONG Depth, _Out_ PUSHORT Link, _Inout_ PBOOLEAN Slowest)
#define XFER_STD_FROM_DEVICE
HubPipe *NTAPI HubFindPipeByHandle(_In_opt_ HubConfiguration *Config, _In_ USBD_PIPE_HANDLE Handle)
#define XFER_CLASS_FROM_PORT
static VOID NTAPI HubFreeDevicePool(_Inout_ PVOID *Buffer)
#define XFER_VENDOR_FROM_INTERFACE
static BOOLEAN NTAPI HubDeviceFailureExpected(_In_ UCHAR Type, _In_ UCHAR Request, _In_ USHORT Value, _In_ USHORT Index)
#define XFER_TYPE(RequestType)
#define XFER_FUNCTION_SUSPEND_WAKE
static EVT_WDF_REQUEST_COMPLETION_ROUTINE HubBootStatusComplete
static BOOLEAN NTAPI HubDeviceTrySend(_In_ HubChild *Child, _In_ UCHAR RequestType, _In_ UCHAR Request, _In_ USHORT Value, _In_ USHORT Index, _In_reads_bytes_opt_(Length) PVOID Buffer, _In_ ULONG Length, _In_ BOOLEAN ShortTransferOk)
static DsmEvent NTAPI HubDeviceTransferFailed(_In_ HubChild *Child, _In_ NTSTATUS Status)
static EVT_WDF_REQUEST_COMPLETION_ROUTINE HubFdoDescriptorComplete
#define HUB_MSOS_INDEX_EXT_CONFIG
#define HUB_MSOS20_INDEX_ALT_ENUM
#define HUB_MSOS_STRING_INDEX
VOID NTAPI HubCompleteFdoDescriptorRequest(_In_ HubChild *Child, _In_ WDFREQUEST Request, _In_ NTSTATUS Status, _In_ ULONG Size)
#define HUB_MSOS20_INDEX_SET
#define HUB_MSOS_INDEX_EXT_PROPERTIES
#define HUB_MSOS_INDEX_CONTAINER_ID
#define DSM_KIND_SUPER_SPEED
_Check_return_ _In_ DXGK_EVENT_TYPE _In_ ULONG Event
#define NT_SUCCESS(StatCode)
#define _IRQL_requires_(irql)
#define ExAllocatePoolWithTag(hernya, size, tag)
#define KeInitializeEvent(pEvt, foo, foo2)
#define KeSetEvent(pEvt, foo, foo2)
#define HUB_BILLBOARD_NO_MODE
#define HUB_ENUM_QUALIFIER_FAILED
#define HUB_ENUM_MSOS_CONTAINER_ID_FAILED
#define HUB_ENUM_MSOS20_SET_FAILED
#define HUB_ENUM_DEVICE_DESCRIPTOR_FAILED
#define HUB_ENUM_MSOS_EXT_CONFIG_FAILED
#define HUB_ENUM_ALT_ENUM_FAILED
#define HUB_ENUM_PRODUCT_STRING_FAILED
#define HUB_ENUM_SET_SEL_FAILED
#define HUB_ENUM_LANGUAGE_IDS_FAILED
#define HUB_ENUM_BOS_FAILED
#define HUB_ENUM_CONFIG_DESCRIPTOR_FAILED
#define HUB_ENUM_SERIAL_NUMBER_FAILED
#define HUB_REQUEST_GET_STATUS
_Must_inspect_result_ _In_ PUCXHUB_DEVICE_CREATE_INFO _Out_ UCXUSBDEVICE * Device
#define UCXHUB_URB_FLAG_ALLOW_LARGE_TRANSFER
_In_ PIRP _In_ PIO_COMPLETION_ROUTINE _In_ PVOID Context
#define ExFreePoolWithTag(_P, _T)
#define _Out_writes_bytes_(s)
#define _In_reads_bytes_opt_(s)
#define UNREFERENCED_PARAMETER(P)
_In_ ULONG _In_ ULONG _In_ ULONG Length
PUSB_DEVICE_CAPABILITY_BILLBOARD_DESCRIPTOR Descriptor
USHORT TotalTpPropagationDelay
struct _LIST_ENTRY * Flink
struct _USB_DEVICE_CAPABILITY_BILLBOARD_DESCRIPTOR::@4127 AlternateMode[1]
#define RtlZeroMemory(Destination, Length)
#define CONTAINING_RECORD(address, type, field)
_Must_inspect_result_ _In_ WDFDEVICE _In_ PUCX_CONTROLLER_CONFIG Config
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFREQUEST Request
_In_ UCXUSBDEVICE _In_ ULONG Interface
#define STATUS_INVALID_PARAMETER
#define STATUS_UNSUCCESSFUL
#define USB_FEATURE_REMOTE_WAKEUP
struct _USB_CONFIGURATION_DESCRIPTOR * PUSB_CONFIGURATION_DESCRIPTOR
#define USB_REQUEST_GET_DESCRIPTOR
#define USB_FEATURE_ENDPOINT_STALL
#define USB_CONFIGURATION_DESCRIPTOR_TYPE
#define MAXIMUM_USB_STRING_LENGTH
#define USB_DEVICE_DESCRIPTOR_TYPE
#define USB_REQUEST_SET_FEATURE
#define USB_REQUEST_SET_CONFIGURATION
#define USB_STRING_DESCRIPTOR_TYPE
#define USB_REQUEST_CLEAR_FEATURE
#define USB_REQUEST_SET_INTERFACE
#define USB_DEVICE_QUALIFIER_DESCRIPTOR_TYPE
#define USB_FEATURE_LTM_ENABLE
#define USB_REQUEST_SET_SEL
#define USB_CHARGING_POLICY_ICCLPF
#define USB_BOS_DESCRIPTOR_TYPE
#define USB_FEATURE_CHARGING_POLICY
#define USB_FEATURE_U1_ENABLE
#define USB_REQUEST_ISOCH_DELAY
#define USB_CHARGING_POLICY_ICCHPF
#define USB_FEATURE_FUNCTION_SUSPEND
#define USB_FEATURE_U2_ENABLE
struct _USB_BOS_DESCRIPTOR * PUSB_BOS_DESCRIPTOR
#define USBD_STATUS_INVALID_PIPE_HANDLE
#define USBD_STATUS_SET_CONFIG_FAILED
#define USBD_STATUS_STALL_PID
#define IOCTL_INTERNAL_USB_SUBMIT_URB
_In_ WDFCOLLECTION _In_ ULONG Index
_Must_inspect_result_ _In_ WDFDEVICE _In_ PIRP _In_ WDFQUEUE Queue
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFQUEUE _In_ _Strict_type_match_ WDF_REQUEST_TYPE RequestType
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFDEVICE Child
_In_ WDFINTERRUPT _In_ WDF_INTERRUPT_POLICY Policy
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
_Must_inspect_result_ FORCEINLINE BOOLEAN WdfRequestSend(_In_ WDFREQUEST Request, _In_ WDFIOTARGET Target, _In_opt_ PWDF_REQUEST_SEND_OPTIONS Options)
_In_ WDFIOTARGET _In_ PWDF_REQUEST_COMPLETION_PARAMS Params
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
#define WDF_NO_SEND_OPTIONS
_In_ WDF_WMI_PROVIDER_CONTROL Control
#define IRP_MJ_INTERNAL_DEVICE_CONTROL