14#define HUB_MAILBOX_READ_TYPE 0xC0
15#define HUB_MAILBOX_WRITE_TYPE 0x40
16#define HUB_MAILBOX_READ_REQUEST 0x40
17#define HUB_MAILBOX_WRITE_REQUEST 0x41
18#define HUB_MAILBOX_SPACE 0x0400
21#define HUB_VERIFIER_CONTROL_FAILURE 0x00000002
24#define DROM_VERSION_OFFSET 13
25#define DROM_LENGTH_OFFSET 14
26#define DROM_LENGTH_MASK 0x0FFF
27#define DROM_FIRST_ENTRY 22
28#define DROM_ENTRY_HEADER 2
29#define DROM_ENTRY_ADAPTER 0x80
30#define DROM_ENTRY_TYPE_MASK 0x3F
31#define DROM_ENTRY_TYPE_IDENTITY 9
34#define DROM_IDENTITY_VENDOR 4
35#define DROM_IDENTITY_PRODUCT 6
36#define DROM_IDENTITY_BCD 8
37#define DROM_IDENTITY_REVISION 14
38#define DROM_IDENTITY_LENGTH 15
61 DPRINT1(
"Hub %p mailbox register %u access failed 0x%lx, URB status 0x%lx\n",
233 DPRINT1(
"Hub %p router DROM identity entry is only %u bytes\n",
m_Hub,
Entry[0]);
244 DPRINT(
"Hub %p router VID %04X PID %04X BCD %04X REV %04X\n",
249 DPRINT1(
"Hub %p router DROM has no identity entry\n",
m_Hub);
259HubDromReportFirmwareUpdateDevice(
267 DPRINT1(
"Hub %p firmware update device USB\\VID_%04X&PID_%04X&BCD_%04X&REV_%04X&GFU is not supported\n",
#define ALIGN_UP_BY(size, align)
WDFIOTARGET m_RootHubTarget
VOID Post(_In_ HubEvent Event)
HubControlRequest m_Control
UCXUSBDEVICE UsbDevice() const
BOOLEAN NeedsForwardProgress() const
UCXHUB_PARENT_INTERFACE m_Parent
BOOLEAN IsRootHub() const
HubRouterIdentity m_RouterIdentity
VOID ReadDromRegister(_In_ USHORT Register)
BOOLEAN IsDromReadWanted()
VOID ParseDromIdentity()
Finds the router identity entry of a version 1 DROM, bounds checking each entry.
VOID UseDromHeaderBuffer()
VOID StoreDromWord(_In_ ULONG Index)
VOID WriteDromRegister(_In_ USHORT Register, _In_ ULONG Value)
BOOLEAN AllocateDromBuffer(_In_ ULONG Length)
#define NT_SUCCESS(StatCode)
static GLfloat Identity[16]
#define _IRQL_requires_(irql)
static EVT_WDF_REQUEST_COMPLETION_ROUTINE HubMailboxComplete
#define DROM_LENGTH_OFFSET
#define DROM_ENTRY_TYPE_MASK
#define DROM_IDENTITY_LENGTH
#define HUB_MAILBOX_READ_REQUEST
static USHORT NTAPI HubDromReadUshort(_In_reads_bytes_(2) const UCHAR *Bytes)
#define DROM_ENTRY_ADAPTER
#define DROM_IDENTITY_VENDOR
#define DROM_ENTRY_TYPE_IDENTITY
#define HUB_MAILBOX_READ_TYPE
#define DROM_VERSION_OFFSET
#define HUB_MAILBOX_WRITE_TYPE
#define HUB_MAILBOX_WRITE_REQUEST
#define HUB_MAILBOX_SPACE
#define DROM_IDENTITY_REVISION
#define DROM_IDENTITY_PRODUCT
static VOID NTAPI HubMailboxTransfer(_In_ HubFdo *Hub, _In_ BOOLEAN Write, _In_ USHORT Register)
#define DROM_ENTRY_HEADER
#define DROM_IDENTITY_BCD
_In_ PIRP _In_ PIO_COMPLETION_ROUTINE _In_ PVOID Context
#define ExFreePoolWithTag(_P, _T)
static PVOID ExAllocatePoolZero(ULONG PoolType, SIZE_T NumberOfBytes, ULONG Tag)
#define _In_reads_bytes_(s)
#define UNREFERENCED_PARAMETER(P)
_In_ ULONG _In_ ULONG Offset
_In_ ULONG _In_ ULONG _In_ ULONG Length
NTSTATUS Send(_In_ WDFIOTARGET Target, _In_opt_ UCXUSBDEVICE Device, _In_ PFN_WDF_REQUEST_COMPLETION_ROUTINE Completion, _In_ WDFCONTEXT Context, _In_reads_bytes_opt_(Length) PVOID Buffer, _In_ ULONG Length, _In_ BOOLEAN ShortTransferOk, _In_ BOOLEAN ForwardProgress)
VOID SetSetup(_In_ UCHAR RequestType, _In_ UCHAR RequestCode, _In_ USHORT Value, _In_ USHORT Index, _In_ USHORT Length)
struct _URB_CONTROL_TRANSFER_EX Urb
#define RtlZeroMemory(Destination, Length)
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFREQUEST Request
static BOOL Write(PBYTE Address, PBYTE Data, SIZE_T Size)
_In_ WDFCOLLECTION _In_ ULONG Index
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
_In_ WDFIOTARGET _In_ PWDF_REQUEST_COMPLETION_PARAMS Params