reactos/drivers/usb/usbhub_new/usbhub.h

658 lines
16 KiB
C

/*
* PROJECT: ReactOS USB Hub Driver
* LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
* PURPOSE: USBHub declarations
* COPYRIGHT: Copyright 2017 Vadim Galyant <vgal@rambler.ru>
*/
#ifndef _USBHUB_H_
#define _USBHUB_H_
#include <ntddk.h>
#include <windef.h>
#include <stdio.h>
#include <wmistr.h>
#include <wmilib.h>
#include <wdmguid.h>
#include <ntstrsafe.h>
#include <usb.h>
#include <usbioctl.h>
#include <hubbusif.h>
#include <usbbusif.h>
#include <usbdlib.h>
#include <ks.h>
#include <drivers/usbport/usbmport.h>
#define USB_HUB_TAG 'BUHU'
#define USBH_EXTENSION_TYPE_HUB 0x01
#define USBH_EXTENSION_TYPE_PORT 0x02
#define USBH_EXTENSION_TYPE_PARENT 0x04
#define USBH_EXTENSION_TYPE_FUNCTION 0x08
#define USBHUB_FDO_FLAG_DEVICE_STARTED (1 << 0)
#define USBHUB_FDO_FLAG_DEVICE_STOPPING (1 << 2)
#define USBHUB_FDO_FLAG_DEVICE_FAILED (1 << 3)
#define USBHUB_FDO_FLAG_REMOTE_WAKEUP (1 << 4)
#define USBHUB_FDO_FLAG_DEVICE_STOPPED (1 << 5)
#define USBHUB_FDO_FLAG_HUB_BUSY (1 << 6)
#define USBHUB_FDO_FLAG_PENDING_WAKE_IRP (1 << 7)
#define USBHUB_FDO_FLAG_RESET_PORT_LOCK (1 << 8)
#define USBHUB_FDO_FLAG_ESD_RECOVERING (1 << 9)
#define USBHUB_FDO_FLAG_SET_D0_STATE (1 << 10)
#define USBHUB_FDO_FLAG_NOT_D0_STATE (1 << 11)
#define USBHUB_FDO_FLAG_WAIT_IDLE_REQUEST (1 << 12)
#define USBHUB_FDO_FLAG_STATE_CHANGING (1 << 13)
#define USBHUB_FDO_FLAG_DEVICE_REMOVED (1 << 14)
#define USBHUB_FDO_FLAG_USB20_HUB (1 << 15)
#define USBHUB_FDO_FLAG_DEFER_CHECK_IDLE (1 << 16)
#define USBHUB_FDO_FLAG_WAKEUP_START (1 << 17)
#define USBHUB_FDO_FLAG_MULTIPLE_TTS (1 << 18) // High-speed Operating Hub with Multiple TTs
#define USBHUB_FDO_FLAG_ENUM_POST_RECOVER (1 << 19)
#define USBHUB_FDO_FLAG_DO_ENUMERATION (1 << 20)
#define USBHUB_FDO_FLAG_CHECK_IDLE_LOCK (1 << 21)
#define USBHUB_FDO_FLAG_HIBERNATE_STATE (1 << 22)
#define USBHUB_FDO_FLAG_NOT_ENUMERATED (1 << 23)
#define USBHUB_FDO_FLAG_DO_SUSPENSE (1 << 24)
#define USBHUB_FDO_FLAG_GOING_IDLE (1 << 25)
#define USBHUB_FDO_FLAG_DEVICE_SUSPENDED (1 << 26)
#define USBHUB_FDO_FLAG_WITEM_INIT (1 << 27)
#define USBHUB_PDO_FLAG_HUB_DEVICE (1 << 0)
#define USBHUB_PDO_FLAG_MULTI_INTERFACE (1 << 1)
#define USBHUB_PDO_FLAG_INIT_PORT_FAILED (1 << 2)
#define USBHUB_PDO_FLAG_PORT_LOW_SPEED (1 << 3)
#define USBHUB_PDO_FLAG_REMOTE_WAKEUP (1 << 4)
#define USBHUB_PDO_FLAG_WAIT_WAKE (1 << 5)
#define USBHUB_PDO_FLAG_NOT_CONNECTED (1 << 6)
#define USBHUB_PDO_FLAG_DELETE_PENDING (1 << 7)
#define USBHUB_PDO_FLAG_POWER_D3 (1 << 8)
#define USBHUB_PDO_FLAG_DEVICE_STARTED (1 << 9)
#define USBHUB_PDO_FLAG_HS_USB1_DUALMODE (1 << 10)
#define USBHUB_PDO_FLAG_REG_DEV_INTERFACE (1 << 11) // SymbolicLink
#define USBHUB_PDO_FLAG_PORT_RESTORE_FAIL (1 << 12)
#define USBHUB_PDO_FLAG_POWER_D1_OR_D2 (1 << 13)
#define USBHUB_PDO_FLAG_OVERCURRENT_PORT (1 << 14)
#define USBHUB_PDO_FLAG_REMOVING_PORT_PDO (1 << 15)
#define USBHUB_PDO_FLAG_INSUFFICIENT_PWR (1 << 16)
#define USBHUB_PDO_FLAG_ALLOC_BNDW_FAILED (1 << 18)
#define USBHUB_PDO_FLAG_PORT_RESSETING (1 << 19)
#define USBHUB_PDO_FLAG_IDLE_NOTIFICATION (1 << 22)
#define USBHUB_PDO_FLAG_PORT_HIGH_SPEED (1 << 23)
#define USBHUB_PDO_FLAG_ENUMERATED (1 << 26)
#define USBHUB_ENUM_FLAG_DEVICE_PRESENT 0x01
#define USBHUB_ENUM_FLAG_GHOST_DEVICE 0x02
/* Hub Class Feature Selectors */
#define USBHUB_FEATURE_USBHUB_FEATURE_C_HUB_LOCAL_POWER 0
#define USBHUB_FEATURE_C_HUB_OVER_CURRENT 1
#define USBHUB_FEATURE_PORT_CONNECTION 0
#define USBHUB_FEATURE_PORT_ENABLE 1
#define USBHUB_FEATURE_PORT_SUSPEND 2
#define USBHUB_FEATURE_PORT_OVER_CURRENT 3
#define USBHUB_FEATURE_PORT_RESET 4
#define USBHUB_FEATURE_PORT_POWER 8
#define USBHUB_FEATURE_PORT_LOW_SPEED 9
#define USBHUB_FEATURE_C_PORT_CONNECTION 16
#define USBHUB_FEATURE_C_PORT_ENABLE 17
#define USBHUB_FEATURE_C_PORT_SUSPEND 18
#define USBHUB_FEATURE_C_PORT_OVER_CURRENT 19
#define USBHUB_FEATURE_C_PORT_RESET 20
#define USBHUB_FEATURE_PORT_TEST 21
#define USBHUB_FEATURE_PORT_INDICATOR 22
#define USBHUB_MAX_CASCADE_LEVELS 6
#define USBHUB_RESET_PORT_MAX_RETRY 3
#define USBHUB_MAX_REQUEST_ERRORS 3
#define USBHUB_FAIL_NO_FAIL 5
#define USBHUB_FAIL_NESTED_TOO_DEEPLY 6
#define USBHUB_FAIL_OVERCURRENT 7
extern PWSTR GenericUSBDeviceString;
typedef struct _USBHUB_PORT_DATA {
USB_PORT_STATUS_AND_CHANGE PortStatus;
PDEVICE_OBJECT DeviceObject;
USB_CONNECTION_STATUS ConnectionStatus;
ULONG PortAttributes;
} USBHUB_PORT_DATA, *PUSBHUB_PORT_DATA;
typedef struct _USBHUB_FDO_EXTENSION *PUSBHUB_FDO_EXTENSION;
typedef VOID
(NTAPI * PUSBHUB_WORKER_ROUTINE)(
IN PUSBHUB_FDO_EXTENSION HubExtension,
IN PVOID Context);
typedef struct _USBHUB_IO_WORK_ITEM {
ULONG Reserved;
LIST_ENTRY HubWorkItemLink;
LONG HubWorkerQueued;
PIO_WORKITEM HubWorkItem;
WORK_QUEUE_TYPE HubWorkItemType;
PUSBHUB_FDO_EXTENSION HubExtension;
PUSBHUB_WORKER_ROUTINE HubWorkerRoutine;
PVOID HubWorkItemBuffer;
} USBHUB_IO_WORK_ITEM, *PUSBHUB_IO_WORK_ITEM;
typedef struct _COMMON_DEVICE_EXTENSION {
ULONG ExtensionType;
PDEVICE_OBJECT SelfDevice;
} COMMON_DEVICE_EXTENSION, *PCOMMON_DEVICE_EXTENSION;
typedef struct _USBHUB_FDO_EXTENSION {
COMMON_DEVICE_EXTENSION Common;
PDEVICE_OBJECT LowerPDO;
PDEVICE_OBJECT LowerDevice;
PDEVICE_OBJECT RootHubPdo;
PDEVICE_OBJECT RootHubPdo2;
KEVENT LowerDeviceEvent;
ULONG HubFlags;
USB_BUS_INTERFACE_HUB_V5 BusInterface;
USB_BUS_INTERFACE_USBDI_V2 BusInterfaceUSBDI;
DEVICE_POWER_STATE DeviceState[POWER_SYSTEM_MAXIMUM];
SYSTEM_POWER_STATE SystemWake;
DEVICE_POWER_STATE DeviceWake;
POWER_STATE CurrentPowerState;
POWER_STATE SystemPowerState;
ULONG MaxPowerPerPort;
USB_DEVICE_DESCRIPTOR HubDeviceDescriptor;
USHORT Port;
PUSB_CONFIGURATION_DESCRIPTOR HubConfigDescriptor;
PUSB_HUB_DESCRIPTOR HubDescriptor;
PUSBHUB_PORT_DATA PortData;
USBD_CONFIGURATION_HANDLE ConfigHandle;
USBD_PIPE_INFORMATION PipeInfo;
PIRP SCEIrp;
PIRP ResetPortIrp;
PVOID SCEBitmap; // 11.12.4 Hub and Port Status Change Bitmap (USB 2.0 Specification)
ULONG SCEBitmapLength;
KEVENT RootHubNotificationEvent;
struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST SCEWorkerUrb;
KEVENT StatusChangeEvent;
KSEMAPHORE IdleSemaphore;
KSPIN_LOCK RelationsWorkerSpinLock;
LIST_ENTRY PdoList;
LONG PendingRequestCount;
KEVENT PendingRequestEvent;
KSEMAPHORE ResetDeviceSemaphore;
PRKEVENT pResetPortEvent;
KSEMAPHORE HubPortSemaphore;
LONG ResetRequestCount;
KEVENT ResetEvent;
PIRP PendingIdleIrp;
PIRP PendingWakeIrp;
LONG FdoWaitWakeLock;
LIST_ENTRY WorkItemList;
KSPIN_LOCK WorkItemSpinLock;
KSPIN_LOCK CheckIdleSpinLock;
KEVENT IdleEvent;
LONG IdleRequestLock;
ULONG RequestErrors;
KSEMAPHORE HubSemaphore;
PUSBHUB_IO_WORK_ITEM WorkItemToQueue;
USB_IDLE_CALLBACK_INFO IdleCallbackInfo;
USB_PORT_STATUS_AND_CHANGE PortStatus;
PIRP PowerIrp;
} USBHUB_FDO_EXTENSION, *PUSBHUB_FDO_EXTENSION;
typedef struct _USBHUB_PORT_PDO_EXTENSION {
COMMON_DEVICE_EXTENSION Common;
ULONG PortPdoFlags;
ULONG EnumFlags;
UNICODE_STRING SymbolicLinkName;
WCHAR InstanceID[4];
PUSBHUB_FDO_EXTENSION HubExtension;
PUSBHUB_FDO_EXTENSION RootHubExtension;
PUSB_DEVICE_HANDLE DeviceHandle;
USHORT PortNumber;
USHORT SN_DescriptorLength;
BOOL IgnoringHwSerial;
LPWSTR SerialNumber; // serial number string
USB_DEVICE_DESCRIPTOR DeviceDescriptor;
USB_DEVICE_DESCRIPTOR OldDeviceDescriptor;
USB_CONFIGURATION_DESCRIPTOR ConfigDescriptor;
USB_INTERFACE_DESCRIPTOR InterfaceDescriptor;
USHORT Reserved1;
PIRP IdleNotificationIrp;
POWER_STATE CurrentPowerState;
DEVICE_CAPABILITIES Capabilities;
ULONG MaxPower;
PVOID BndwTimeoutContext;
KSPIN_LOCK PortTimeoutSpinLock;
LIST_ENTRY PortLink;
LONG PoRequestCounter;
LONG PendingSystemPoRequest;
LONG PendingDevicePoRequest;
LONG StateBehindD2;
PIRP PdoWaitWakeIrp;
LIST_ENTRY PortPowerList;
KSPIN_LOCK PortPowerListSpinLock;
} USBHUB_PORT_PDO_EXTENSION, *PUSBHUB_PORT_PDO_EXTENSION;
typedef struct _USBHUB_URB_TIMEOUT_CONTEXT {
PIRP Irp;
KEVENT UrbTimeoutEvent;
KDPC UrbTimeoutDPC;
KTIMER UrbTimeoutTimer;
KSPIN_LOCK UrbTimeoutSpinLock;
BOOL IsNormalCompleted;
} USBHUB_URB_TIMEOUT_CONTEXT, *PUSBHUB_URB_TIMEOUT_CONTEXT;
typedef struct _USBHUB_STATUS_CHANGE_CONTEXT {
ULONG Reserved;
BOOL IsRequestErrors;
PUSBHUB_FDO_EXTENSION HubExtension;
} USBHUB_STATUS_CHANGE_CONTEXT, *PUSBHUB_STATUS_CHANGE_CONTEXT;
typedef struct _USBHUB_IDLE_HUB_CONTEXT {
ULONG Reserved;
NTSTATUS Status;
} USBHUB_IDLE_HUB_CONTEXT, *PUSBHUB_IDLE_HUB_CONTEXT;
typedef struct _USBHUB_IDLE_PORT_CONTEXT {
ULONG Reserved;
LIST_ENTRY PwrList;
NTSTATUS Status;
} USBHUB_IDLE_PORT_CONTEXT, *PUSBHUB_IDLE_PORT_CONTEXT;
typedef struct _USBHUB_IDLE_PORT_CANCEL_CONTEXT {
ULONG Reserved;
PIRP Irp;
} USBHUB_IDLE_PORT_CANCEL_CONTEXT, *PUSBHUB_IDLE_PORT_CANCEL_CONTEXT;
typedef struct _USBHUB_RESET_PORT_CONTEXT {
ULONG Reserved;
PUSBHUB_PORT_PDO_EXTENSION PortExtension;
PIRP Irp;
} USBHUB_RESET_PORT_CONTEXT, *PUSBHUB_RESET_PORT_CONTEXT;
/* debug.c */
VOID
NTAPI
USBHUB_DumpingDeviceDescriptor(
IN PUSB_DEVICE_DESCRIPTOR DeviceDescriptor);
VOID
NTAPI
USBHUB_DumpingConfiguration(
IN PUSB_CONFIGURATION_DESCRIPTOR ConfigDescriptor);
VOID
NTAPI
USBHUB_DumpingIDs(
IN PVOID Id);
/* ioctl.c */
NTSTATUS
NTAPI
USBH_DeviceControl(
IN PUSBHUB_FDO_EXTENSION HubExtension,
IN PIRP Irp);
NTSTATUS
NTAPI
USBH_PdoInternalControl(
IN PUSBHUB_PORT_PDO_EXTENSION PortExtension,
IN PIRP Irp);
/* pnp.c */
NTSTATUS
NTAPI
USBH_PdoRemoveDevice(
IN PUSBHUB_PORT_PDO_EXTENSION PortExtension,
IN PUSBHUB_FDO_EXTENSION HubExtension);
NTSTATUS
NTAPI
USBH_FdoPnP(
IN PUSBHUB_FDO_EXTENSION HubExtension,
IN PIRP Irp,
IN UCHAR Minor);
NTSTATUS
NTAPI
USBH_PdoPnP(
IN PUSBHUB_PORT_PDO_EXTENSION PortExtension,
IN PIRP Irp,
IN UCHAR Minor,
OUT BOOLEAN * IsCompleteIrp);
/* power.c */
VOID
NTAPI
USBH_CompletePowerIrp(
IN PUSBHUB_FDO_EXTENSION HubExtension,
IN PIRP Irp,
IN NTSTATUS NtStatus);
NTSTATUS
NTAPI
USBH_HubSetD0(
IN PUSBHUB_FDO_EXTENSION HubExtension);
NTSTATUS
NTAPI
USBH_FdoPower(
IN PUSBHUB_FDO_EXTENSION HubExtension,
IN PIRP Irp,
IN UCHAR Minor);
NTSTATUS
NTAPI
USBH_PdoPower(
IN PUSBHUB_PORT_PDO_EXTENSION PortExtension,
IN PIRP Irp,
IN UCHAR Minor);
VOID
NTAPI
USBH_HubCompletePortWakeIrps(
IN PUSBHUB_FDO_EXTENSION HubExtension,
IN NTSTATUS NtStatus);
VOID
NTAPI
USBH_HubCancelWakeIrp(
IN PUSBHUB_FDO_EXTENSION HubExtension,
IN PIRP Irp);
VOID
NTAPI
USBH_IdleCancelPowerHubWorker(
IN PUSBHUB_FDO_EXTENSION HubExtension,
IN PVOID Context);
/* usbhub.c */
NTSTATUS
NTAPI
USBH_Wait(
IN ULONG Milliseconds);
VOID
NTAPI
USBH_CompleteIrp(
IN PIRP Irp,
IN NTSTATUS CompleteStatus);
NTSTATUS
NTAPI
USBH_PassIrp(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp);
PUSBHUB_PORT_PDO_EXTENSION
NTAPI
PdoExt(
IN PDEVICE_OBJECT DeviceObject);
NTSTATUS
NTAPI
USBH_WriteFailReasonID(
IN PDEVICE_OBJECT DeviceObject,
IN ULONG Data);
NTSTATUS
NTAPI
USBH_SetPdoRegistryParameter(
IN PDEVICE_OBJECT DeviceObject,
IN PCWSTR SourceString,
IN PVOID Data,
IN ULONG DataSize,
IN ULONG Type,
IN ULONG DevInstKeyType);
NTSTATUS
NTAPI
USBH_SyncSubmitUrb(
IN PDEVICE_OBJECT DeviceObject,
IN PURB Urb);
NTSTATUS
NTAPI
USBH_FdoSyncSubmitUrb(
IN PDEVICE_OBJECT FdoDevice,
IN PURB Urb);
NTSTATUS
NTAPI
USBH_SyncResetPort(
IN PUSBHUB_FDO_EXTENSION HubExtension,
IN USHORT Port);
NTSTATUS
NTAPI
USBH_GetDeviceType(
IN PUSBHUB_FDO_EXTENSION HubExtension,
IN PUSB_DEVICE_HANDLE DeviceHandle,
OUT USB_DEVICE_TYPE * OutDeviceType);
PUSBHUB_FDO_EXTENSION
NTAPI
USBH_GetRootHubExtension(
IN PUSBHUB_FDO_EXTENSION HubExtension);
NTSTATUS
NTAPI
USBH_SyncGetRootHubPdo(
IN PDEVICE_OBJECT DeviceObject,
IN OUT PDEVICE_OBJECT * OutPdo1,
IN OUT PDEVICE_OBJECT * OutPdo2);
NTSTATUS
NTAPI
USBH_SyncGetHubCount(
IN PDEVICE_OBJECT DeviceObject,
IN OUT PULONG OutHubCount);
PUSB_DEVICE_HANDLE
NTAPI
USBH_SyncGetDeviceHandle(
IN PDEVICE_OBJECT DeviceObject);
NTSTATUS
NTAPI
USBH_GetDeviceDescriptor(
IN PDEVICE_OBJECT DeviceObject,
IN PUSB_DEVICE_DESCRIPTOR HubDeviceDescriptor);
NTSTATUS
NTAPI
USBH_GetConfigurationDescriptor(
IN PDEVICE_OBJECT DeviceObject,
IN PUSB_CONFIGURATION_DESCRIPTOR * pConfigurationDescriptor);
NTSTATUS
NTAPI
USBH_SyncGetHubDescriptor(
IN PUSBHUB_FDO_EXTENSION HubExtension);
NTSTATUS
NTAPI
USBH_SyncGetStringDescriptor(
IN PDEVICE_OBJECT DeviceObject,
IN UCHAR Index,
IN USHORT LanguageId,
IN PUSB_STRING_DESCRIPTOR Descriptor,
IN ULONG NumberOfBytes,
IN PULONG OutLength,
IN BOOLEAN IsValidateLength);
NTSTATUS
NTAPI
USBH_SyncGetPortStatus(
IN PUSBHUB_FDO_EXTENSION HubExtension,
IN USHORT Port,
IN PUSB_PORT_STATUS_AND_CHANGE PortStatus,
IN ULONG Length);
NTSTATUS
NTAPI
USBH_SyncClearPortStatus(
IN PUSBHUB_FDO_EXTENSION HubExtension,
IN USHORT Port,
IN USHORT RequestValue);
NTSTATUS
NTAPI
USBH_SyncPowerOnPorts(
IN PUSBHUB_FDO_EXTENSION HubExtension);
NTSTATUS
NTAPI
USBH_SyncDisablePort(
IN PUSBHUB_FDO_EXTENSION HubExtension,
IN USHORT Port);
BOOLEAN
NTAPI
USBH_HubIsBusPowered(
IN PDEVICE_OBJECT DeviceObject,
IN PUSB_CONFIGURATION_DESCRIPTOR HubConfigDescriptor);
NTSTATUS
NTAPI
USBH_SubmitStatusChangeTransfer(
IN PUSBHUB_FDO_EXTENSION HubExtension);
NTSTATUS
NTAPI
USBD_CreateDeviceEx(
IN PUSBHUB_FDO_EXTENSION HubExtension,
IN PUSB_DEVICE_HANDLE * OutDeviceHandle,
IN USB_PORT_STATUS UsbPortStatus,
IN USHORT Port);
NTSTATUS
NTAPI
USBD_RemoveDeviceEx(
IN PUSBHUB_FDO_EXTENSION HubExtension,
IN PUSB_DEVICE_HANDLE DeviceHandle,
IN ULONG Flags);
NTSTATUS
NTAPI
USBD_InitializeDeviceEx(
IN PUSBHUB_FDO_EXTENSION HubExtension,
IN PUSB_DEVICE_HANDLE DeviceHandle,
IN PUCHAR DeviceDescriptorBuffer,
IN ULONG DeviceDescriptorBufferLength,
IN PUCHAR ConfigDescriptorBuffer,
IN ULONG ConfigDescriptorBufferLength);
VOID
NTAPI
USBHUB_SetDeviceHandleData(
IN PUSBHUB_FDO_EXTENSION HubExtension,
IN PDEVICE_OBJECT UsbDevicePdo,
IN PVOID DeviceHandle);
VOID
NTAPI
USBHUB_FlushAllTransfers(
IN PUSBHUB_FDO_EXTENSION HubExtension);
NTSTATUS
NTAPI
USBD_GetDeviceInformationEx(
IN PUSBHUB_PORT_PDO_EXTENSION PortExtension,
IN PUSBHUB_FDO_EXTENSION HubExtension,
IN PUSB_NODE_CONNECTION_INFORMATION_EX Info,
IN ULONG Length,
IN PUSB_DEVICE_HANDLE DeviceHandle);
NTSTATUS
NTAPI
USBD_RestoreDeviceEx(
IN PUSBHUB_FDO_EXTENSION HubExtension,
IN OUT PUSB_DEVICE_HANDLE OldDeviceHandle,
IN OUT PUSB_DEVICE_HANDLE NewDeviceHandle);
NTSTATUS
NTAPI
USBH_AllocateWorkItem(
IN PUSBHUB_FDO_EXTENSION HubExtension,
OUT PUSBHUB_IO_WORK_ITEM * OutHubIoWorkItem,
IN PUSBHUB_WORKER_ROUTINE WorkerRoutine,
IN SIZE_T BufferLength,
OUT PVOID * OutHubWorkItemBuffer,
IN WORK_QUEUE_TYPE Type);
VOID
NTAPI
USBH_QueueWorkItem(
IN PUSBHUB_FDO_EXTENSION HubExtension,
IN PUSBHUB_IO_WORK_ITEM HubIoWorkItem);
VOID
NTAPI
USBH_FreeWorkItem(
IN PUSBHUB_IO_WORK_ITEM HubIoWorkItem);
NTSTATUS
NTAPI
USBD_RegisterRootHubCallBack(
IN PUSBHUB_FDO_EXTENSION HubExtension);
NTSTATUS
NTAPI
USBD_UnRegisterRootHubCallBack(
IN PUSBHUB_FDO_EXTENSION HubExtension);
VOID
NTAPI
USBH_HubCancelIdleIrp(
IN PUSBHUB_FDO_EXTENSION HubExtension,
IN PIRP IdleIrp);
BOOLEAN
NTAPI
USBH_CheckIdleAbort(
IN PUSBHUB_FDO_EXTENSION HubExtension,
IN BOOLEAN IsWait,
IN BOOLEAN IsExtCheck);
VOID
NTAPI
USBH_CheckHubIdle(
IN PUSBHUB_FDO_EXTENSION HubExtension);
VOID
NTAPI
USBH_CheckIdleDeferred(
IN PUSBHUB_FDO_EXTENSION HubExtension);
NTSTATUS
NTAPI
USBH_CheckDeviceLanguage(
IN PDEVICE_OBJECT DeviceObject,
IN USHORT LanguageId);
NTSTATUS
NTAPI
USBH_CreateDevice(
IN PUSBHUB_FDO_EXTENSION HubExtension,
IN USHORT Port,
IN USB_PORT_STATUS UsbPortStatus,
IN ULONG IsWait);
NTSTATUS
NTAPI
USBH_ResetDevice(
IN PUSBHUB_FDO_EXTENSION HubExtension,
IN USHORT Port,
IN BOOLEAN IsKeepDeviceData,
IN BOOLEAN IsWait);
NTSTATUS
NTAPI
DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath);
#endif /* _USBHUB_H_ */