14 #include <drivers/usbport/usbmport.h>
16 #define PCI_INTERFACE_USB_ID_UHCI 0x00
17 #define PCI_INTERFACE_USB_ID_OHCI 0x10
18 #define PCI_INTERFACE_USB_ID_EHCI 0x20
19 #define PCI_INTERFACE_USB_ID_XHCI 0x30
21 #ifdef USBD_TRANSFER_DIRECTION // due hubbusif.h included usbdi.h (Which overwrites...)
22 #undef USBD_TRANSFER_DIRECTION
23 #define USBD_TRANSFER_DIRECTION 0x00000001
26 #define USBPORT_RECIPIENT_ROOT_HUB BMREQUEST_TO_DEVICE
27 #define USBPORT_RECIPIENT_ROOT_PORT BMREQUEST_TO_OTHER
29 #define INVALIDATE_ENDPOINT_ONLY 0
30 #define INVALIDATE_ENDPOINT_WORKER_THREAD 1
31 #define INVALIDATE_ENDPOINT_WORKER_DPC 2
32 #define INVALIDATE_ENDPOINT_INT_NEXT_SOF 3
34 #define USBPORT_DMA_DIRECTION_FROM_DEVICE 1
35 #define USBPORT_DMA_DIRECTION_TO_DEVICE 2
37 #define USB_PORT_TAG 'pbsu'
38 #define URB_FUNCTION_MAX 0x31
40 /* Hub Class Feature Selectors (Recipient - Port) */
41 #define FEATURE_PORT_CONNECTION 0
42 #define FEATURE_PORT_ENABLE 1
43 #define FEATURE_PORT_SUSPEND 2
44 #define FEATURE_PORT_OVER_CURRENT 3
45 #define FEATURE_PORT_RESET 4
46 #define FEATURE_PORT_POWER 8
47 #define FEATURE_PORT_LOW_SPEED 9
48 #define FEATURE_C_PORT_CONNECTION 16
49 #define FEATURE_C_PORT_ENABLE 17
50 #define FEATURE_C_PORT_SUSPEND 18
51 #define FEATURE_C_PORT_OVER_CURRENT 19
52 #define FEATURE_C_PORT_RESET 20
54 /* Hub Class Feature Selectors (Recipient - Hub) */
55 #define FEATURE_C_HUB_LOCAL_POWER 0
56 #define FEATURE_C_HUB_OVER_CURRENT 1
59 #define USBPORT_FLAG_INT_CONNECTED 0x00000001
60 #define USBPORT_FLAG_HC_STARTED 0x00000002
61 #define USBPORT_FLAG_HC_POLLING 0x00000004
62 #define USBPORT_FLAG_WORKER_THREAD_ON 0x00000008
63 #define USBPORT_FLAG_HC_SUSPEND 0x00000100
64 #define USBPORT_FLAG_INTERRUPT_ENABLED 0x00000400
65 #define USBPORT_FLAG_SELECTIVE_SUSPEND 0x00000800
66 #define USBPORT_FLAG_DOS_SYMBOLIC_NAME 0x00010000
67 #define USBPORT_FLAG_LEGACY_SUPPORT 0x00080000
68 #define USBPORT_FLAG_HC_WAKE_SUPPORT 0x00200000
69 #define USBPORT_FLAG_DIAGNOSTIC_MODE 0x00800000 //IOCTL_USB_DIAGNOSTIC_MODE_ON
70 #define USBPORT_FLAG_COMPANION_HC 0x01000000
71 #define USBPORT_FLAG_REGISTERED_FDO 0x02000000
72 #define USBPORT_FLAG_NO_HACTION 0x04000000
73 #define USBPORT_FLAG_BIOS_DISABLE_SS 0x08000000 //Selective Suspend
74 #define USBPORT_FLAG_PWR_AND_CHIRP_LOCK 0x10000000
75 #define USBPORT_FLAG_POWER_AND_CHIRP_OK 0x40000000
76 #define USBPORT_FLAG_RH_INIT_CALLBACK 0x80000000
79 #define USBPORT_PNP_STATE_NOT_INIT 0x00000001
80 #define USBPORT_PNP_STATE_STARTED 0x00000002
81 #define USBPORT_PNP_STATE_FAILED 0x00000004
82 #define USBPORT_PNP_STATE_STOPPED 0x00000008
85 #define USBPORT_TMFLAG_TIMER_QUEUED 0x00000001
86 #define USBPORT_TMFLAG_HC_SUSPENDED 0x00000002
87 #define USBPORT_TMFLAG_HC_RESUME 0x00000004
88 #define USBPORT_TMFLAG_RH_SUSPENDED 0x00000008
89 #define USBPORT_TMFLAG_TIMER_STARTED 0x00000010
90 #define USBPORT_TMFLAG_WAKE 0x00000020
91 #define USBPORT_TMFLAG_IDLE_QUEUEITEM_ON 0x00000040
94 #define USBPORT_MPFLAG_INTERRUPTS_ENABLED 0x00000001
95 #define USBPORT_MPFLAG_SUSPENDED 0x00000002
97 /* Device handle Flags (USBPORT_DEVICE_HANDLE) */
98 #define DEVICE_HANDLE_FLAG_ROOTHUB 0x00000002
99 #define DEVICE_HANDLE_FLAG_REMOVED 0x00000008
100 #define DEVICE_HANDLE_FLAG_INITIALIZED 0x00000010
102 /* Endpoint Flags (USBPORT_ENDPOINT) */
103 #define ENDPOINT_FLAG_DMA_TYPE 0x00000001
104 #define ENDPOINT_FLAG_ROOTHUB_EP0 0x00000002
105 #define ENDPOINT_FLAG_NUKE 0x00000008
106 #define ENDPOINT_FLAG_QUEUENE_EMPTY 0x00000010
107 #define ENDPOINT_FLAG_ABORTING 0x00000020
108 #define ENDPOINT_FLAG_IDLE 0x00000100
109 #define ENDPOINT_FLAG_OPENED 0x00000200
110 #define ENDPOINT_FLAG_CLOSED 0x00000400
112 /* UsbdFlags Flags (URB) */
113 #define USBD_FLAG_ALLOCATED_MDL 0x00000002
114 #define USBD_FLAG_NOT_ISO_TRANSFER 0x00000010
115 #define USBD_FLAG_ALLOCATED_TRANSFER 0x00000020
117 /* Pipe handle Flags (USBPORT_PIPE_HANDLE) */
118 #define PIPE_HANDLE_FLAG_CLOSED 0x00000001
119 #define PIPE_HANDLE_FLAG_NULL_PACKET_SIZE 0x00000002
121 /* Transfer Flags (USBPORT_TRANSFER) */
122 #define TRANSFER_FLAG_CANCELED 0x00000001
123 #define TRANSFER_FLAG_DMA_MAPPED 0x00000002
124 #define TRANSFER_FLAG_SUBMITED 0x00000008
125 #define TRANSFER_FLAG_ABORTED 0x00000010
126 #define TRANSFER_FLAG_ISO 0x00000020
127 #define TRANSFER_FLAG_DEVICE_GONE 0x00000080
128 #define TRANSFER_FLAG_SPLITED 0x00000100
130 extern KSPIN_LOCK USBPORT_SpinLock
;
131 extern LIST_ENTRY USBPORT_MiniPortDrivers
;
133 typedef USBD_STATUS
* PUSBD_STATUS
;
135 typedef struct _USBPORT_COMMON_BUFFER_HEADER
{
138 PHYSICAL_ADDRESS LogicalAddress
;
140 ULONG_PTR VirtualAddress
;
141 ULONG_PTR PhysicalAddress
;
142 } USBPORT_COMMON_BUFFER_HEADER
, *PUSBPORT_COMMON_BUFFER_HEADER
;
144 typedef struct _USBPORT_ENDPOINT
*PUSBPORT_ENDPOINT
;
146 typedef struct _USBPORT_PIPE_HANDLE
{
149 USB_ENDPOINT_DESCRIPTOR EndpointDescriptor
;
151 PUSBPORT_ENDPOINT Endpoint
;
153 } USBPORT_PIPE_HANDLE
, *PUSBPORT_PIPE_HANDLE
;
155 typedef struct _USBPORT_CONFIGURATION_HANDLE
{
156 PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor
;
157 LIST_ENTRY InterfaceHandleList
;
158 //USB_CONFIGURATION_DESCRIPTOR CfgDescriptor; // Body.
159 } USBPORT_CONFIGURATION_HANDLE
, *PUSBPORT_CONFIGURATION_HANDLE
;
161 typedef struct _USBPORT_INTERFACE_HANDLE
{
162 LIST_ENTRY InterfaceLink
;
163 UCHAR AlternateSetting
;
165 USB_INTERFACE_DESCRIPTOR InterfaceDescriptor
;
167 USBPORT_PIPE_HANDLE PipeHandle
[1];
168 } USBPORT_INTERFACE_HANDLE
, *PUSBPORT_INTERFACE_HANDLE
;
170 typedef struct _USBPORT_DEVICE_HANDLE
{
172 USHORT DeviceAddress
;
174 USBPORT_PIPE_HANDLE PipeHandle
;
177 LIST_ENTRY PipeHandleList
;
178 PUSBPORT_CONFIGURATION_HANDLE ConfigHandle
;
179 struct _USBPORT_DEVICE_HANDLE
*HubDeviceHandle
;
180 USB_DEVICE_DESCRIPTOR DeviceDescriptor
;
181 LIST_ENTRY DeviceHandleLink
;
182 LONG DeviceHandleLock
;
184 } USBPORT_DEVICE_HANDLE
, *PUSBPORT_DEVICE_HANDLE
;
186 typedef struct _USBPORT_ENDPOINT
{
188 PDEVICE_OBJECT FdoDevice
;
189 PUSBPORT_COMMON_BUFFER_HEADER HeaderBuffer
;
190 PUSBPORT_DEVICE_HANDLE DeviceHandle
;
191 USBPORT_ENDPOINT_PROPERTIES EndpointProperties
;
192 ULONG EndpointWorker
;
195 KSPIN_LOCK EndpointSpinLock
;
196 KIRQL EndpointOldIrql
;
197 KIRQL EndpointStateOldIrql
;
200 LONG FlushPendingLock
;
204 LIST_ENTRY StateChangeLink
;
205 KSPIN_LOCK StateChangeSpinLock
;
207 LIST_ENTRY PendingTransferList
;
208 LIST_ENTRY TransferList
;
209 LIST_ENTRY CancelList
;
210 LIST_ENTRY AbortList
;
212 LIST_ENTRY EndpointLink
;
213 LIST_ENTRY WorkerLink
;
214 LIST_ENTRY CloseLink
;
215 LIST_ENTRY DispatchLink
;
216 LIST_ENTRY FlushLink
;
217 LIST_ENTRY FlushControllerLink
;
218 LIST_ENTRY FlushAbortLink
;
219 } USBPORT_ENDPOINT
, *PUSBPORT_ENDPOINT
;
221 typedef struct _USBPORT_TRANSFER
{
226 PVOID MiniportTransfer
;
227 SIZE_T PortTransferLength
; // Only port part
228 SIZE_T FullTransferLength
; // Port + miniport
229 PUSBPORT_ENDPOINT Endpoint
;
230 USBPORT_TRANSFER_PARAMETERS TransferParameters
;
231 PMDL TransferBufferMDL
;
233 LIST_ENTRY TransferLink
;
234 USBD_STATUS USBDStatus
;
235 ULONG CompletedTransferLen
;
236 ULONG NumberOfMapRegisters
;
237 PVOID MapRegisterBase
;
240 // SgList should be LAST field
241 USBPORT_SCATTER_GATHER_LIST SgList
; // Non IsoTransfer
242 } USBPORT_TRANSFER
, *PUSBPORT_TRANSFER
;
244 typedef struct _USBPORT_IRP_TABLE
{
245 struct _USBPORT_IRP_TABLE
* LinkNextTable
;
247 } USBPORT_IRP_TABLE
, *PUSBPORT_IRP_TABLE
;
249 typedef struct _USBPORT_COMMON_DEVICE_EXTENSION
{
250 PDEVICE_OBJECT SelfDevice
;
251 PDEVICE_OBJECT LowerPdoDevice
; // PhysicalDeviceObject
252 PDEVICE_OBJECT LowerDevice
; // TopOfStackDeviceObject
254 UNICODE_STRING SymbolicLinkName
;
255 BOOL IsInterfaceEnabled
;
256 DEVICE_POWER_STATE DevicePowerState
;
258 } USBPORT_COMMON_DEVICE_EXTENSION
, *PUSBPORT_COMMON_DEVICE_EXTENSION
;
260 typedef struct _USBPORT_DEVICE_EXTENSION
{
261 USBPORT_COMMON_DEVICE_EXTENSION CommonExtension
;
263 PDEVICE_OBJECT RootHubPdo
; // RootHubDeviceObject
264 KSPIN_LOCK RootHubCallbackSpinLock
;
265 LONG RHInitCallBackLock
;
266 LONG ChirpRootPortLock
;
267 KSEMAPHORE ControllerSemaphore
;
269 UNICODE_STRING DosDeviceSymbolicName
;
271 LIST_ENTRY ControllerLink
;
272 ULONG CommonBufferLimit
;
276 PUSBPORT_MINIPORT_INTERFACE MiniPortInterface
;
277 USBPORT_RESOURCES UsbPortResources
;
278 PUSBPORT_COMMON_BUFFER_HEADER MiniPortCommonBuffer
;
279 KSPIN_LOCK MiniportSpinLock
;
281 BUS_INTERFACE_STANDARD BusInterface
;
289 PDMA_ADAPTER DmaAdapter
;
292 PKINTERRUPT InterruptObject
;
295 LONG IsrDpcHandlerCounter
;
296 KSPIN_LOCK MiniportInterruptsSpinLock
;
297 KTIMER TimerSoftInterrupt
;
298 KDPC SoftInterruptDpc
;
300 ULONG PeriodicEndpoints
;
301 LIST_ENTRY EndpointList
;
302 KSPIN_LOCK EndpointListSpinLock
;
303 LIST_ENTRY EpStateChangeList
;
304 KSPIN_LOCK EpStateChangeSpinLock
;
305 LIST_ENTRY EndpointClosedList
;
306 KSPIN_LOCK EndpointClosedSpinLock
;
307 LIST_ENTRY WorkerList
;
309 LIST_ENTRY MapTransferList
;
310 KSPIN_LOCK MapTransferSpinLock
;
311 LIST_ENTRY DoneTransferList
;
312 KSPIN_LOCK DoneTransferSpinLock
;
313 KDPC TransferFlushDpc
;
314 KSPIN_LOCK FlushTransferSpinLock
;
315 KSPIN_LOCK FlushPendingTransferSpinLock
;
317 ULONG TimerValue
; // Timer period (500) msec. default
321 KSPIN_LOCK TimerFlagsSpinLock
;
323 PRKTHREAD WorkerThread
;
324 HANDLE WorkerThreadHandle
;
325 KEVENT WorkerThreadEvent
;
326 KSPIN_LOCK WorkerThreadEventSpinLock
;
328 ULONG UsbAddressBitMap
[4];
329 LIST_ENTRY DeviceHandleList
;
330 KSPIN_LOCK DeviceHandleSpinLock
;
331 KSEMAPHORE DeviceSemaphore
;
332 /* Device Capabilities */
333 DEVICE_CAPABILITIES Capabilities
;
335 ULONG PciDeviceNumber
;
336 ULONG PciFunctionNumber
;
337 ULONG TotalBusBandwidth
;
339 LARGE_INTEGER IdleTime
;
341 KSPIN_LOCK IdleIoCsqSpinLock
;
342 LIST_ENTRY IdleIrpList
;
343 LONG IdleLockCounter
;
345 IO_CSQ BadRequestIoCsq
;
346 KSPIN_LOCK BadRequestIoCsqSpinLock
;
347 LIST_ENTRY BadRequestList
;
348 LONG BadRequestLockCounter
;
350 PUSBPORT_IRP_TABLE PendingIrpTable
;
351 PUSBPORT_IRP_TABLE ActiveIrpTable
;
353 LONG SetPowerLockCounter
;
354 KSPIN_LOCK PowerWakeSpinLock
;
355 KSPIN_LOCK SetPowerD0SpinLock
;
356 KDPC WorkerRequestDpc
;
359 /* Miniport extension should be aligned on 0x100 */
366 } USBPORT_DEVICE_EXTENSION
, *PUSBPORT_DEVICE_EXTENSION
;
369 C_ASSERT(sizeof(USBPORT_DEVICE_EXTENSION
) == 0x400);
371 C_ASSERT(sizeof(USBPORT_DEVICE_EXTENSION
) == 0x600);
374 typedef struct _USBPORT_RH_DESCRIPTORS
{
375 USB_DEVICE_DESCRIPTOR DeviceDescriptor
;
376 USB_CONFIGURATION_DESCRIPTOR ConfigDescriptor
;
377 USB_INTERFACE_DESCRIPTOR InterfaceDescriptor
;
378 USB_ENDPOINT_DESCRIPTOR EndPointDescriptor
;
379 USB_HUB_DESCRIPTOR Descriptor
; // Size may be: 7 + 2[1..32] (7 + 2..64)
380 } USBPORT_RH_DESCRIPTORS
, *PUSBPORT_RH_DESCRIPTORS
;
382 typedef struct _USBPORT_RHDEVICE_EXTENSION
{
383 USBPORT_COMMON_DEVICE_EXTENSION CommonExtension
;
385 PDEVICE_OBJECT FdoDevice
;
387 USBPORT_DEVICE_HANDLE DeviceHandle
;
388 PUSBPORT_RH_DESCRIPTORS RootHubDescriptors
;
389 PUSBPORT_ENDPOINT Endpoint
;
390 ULONG ConfigurationValue
;
391 PRH_INIT_CALLBACK RootHubInitCallback
;
392 PVOID RootHubInitContext
;
393 DEVICE_CAPABILITIES Capabilities
;
395 } USBPORT_RHDEVICE_EXTENSION
, *PUSBPORT_RHDEVICE_EXTENSION
;
397 typedef struct _USBPORT_ASYNC_CALLBACK_DATA
{
399 PDEVICE_OBJECT FdoDevice
;
402 ASYNC_TIMER_CALLBACK
*CallbackFunction
;
403 ULONG CallbackContext
;
404 } USBPORT_ASYNC_CALLBACK_DATA
, *PUSBPORT_ASYNC_CALLBACK_DATA
;
406 C_ASSERT(sizeof(USBPORT_ASYNC_CALLBACK_DATA
) == 16 + 18 * sizeof(PVOID
));
408 typedef struct _TIMER_WORK_QUEUE_ITEM
{
409 WORK_QUEUE_ITEM WqItem
;
410 PDEVICE_OBJECT FdoDevice
;
412 } TIMER_WORK_QUEUE_ITEM
, *PTIMER_WORK_QUEUE_ITEM
;
417 USBPORT_USBDStatusToNtStatus(
419 IN USBD_STATUS USBDStatus
);
424 IN PVOID MiniPortExtension
,
425 IN ULONG Milliseconds
);
429 USBPORT_TransferFlushDpc(
431 IN PVOID DeferredContext
,
432 IN PVOID SystemArgument1
,
433 IN PVOID SystemArgument2
);
437 USBPORT_CreateWorkerThread(
438 IN PDEVICE_OBJECT FdoDevice
);
443 IN PDEVICE_OBJECT FdoDevice
,
446 PUSBPORT_COMMON_BUFFER_HEADER
448 USBPORT_AllocateCommonBuffer(
449 IN PDEVICE_OBJECT FdoDevice
,
450 IN SIZE_T BufferLength
);
454 USBPORT_FreeCommonBuffer(
455 IN PDEVICE_OBJECT FdoDevice
,
456 IN PUSBPORT_COMMON_BUFFER_HEADER HeaderBuffer
);
460 USBPORT_AllocateTransfer(
461 IN PDEVICE_OBJECT FdoDevice
,
463 IN PUSBPORT_DEVICE_HANDLE DeviceHandle
,
469 USBPORT_FlushMapTransfers(
470 IN PDEVICE_OBJECT FdoDevice
);
476 IN PVOID DeferredContext
,
477 IN PVOID SystemArgument1
,
478 IN PVOID SystemArgument2
);
482 USBPORT_InterruptService(
483 IN PKINTERRUPT Interrupt
,
484 IN PVOID ServiceContext
);
488 USBPORT_SignalWorkerThread(
489 IN PDEVICE_OBJECT FdoDevice
);
493 USBPORT_CompleteTransfer(
495 IN USBD_STATUS TransferStatus
);
500 IN PDEVICE_OBJECT FdoDevice
);
504 USBPORT_WorkerRequestDpc(
506 IN PVOID DeferredContext
,
507 IN PVOID SystemArgument1
,
508 IN PVOID SystemArgument2
);
512 USBPORT_QueueDoneTransfer(
513 IN PUSBPORT_TRANSFER Transfer
,
514 IN USBD_STATUS USBDStatus
);
518 USBPORT_MiniportInterrupts(
519 IN PDEVICE_OBJECT FdoDevice
,
520 IN BOOLEAN IsEnable
);
524 USBPORT_SetRegistryKeyValue(
525 IN PDEVICE_OBJECT DeviceObject
,
526 IN BOOL UseDriverKey
,
528 IN PCWSTR ValueNameString
,
534 USBPORT_GetRegistryKeyValueFullInfo(
535 IN PDEVICE_OBJECT FdoDevice
,
536 IN PDEVICE_OBJECT PdoDevice
,
537 IN BOOL UseDriverKey
,
538 IN PCWSTR SourceString
,
541 IN ULONG NumberOfBytes
);
546 IN PDEVICE_OBJECT FdoDevice
);
551 IN PDEVICE_OBJECT FdoDevice
);
555 USBPORT_RemoveUSBxFdo(
556 IN PDEVICE_OBJECT FdoDevice
);
560 USBPORT_FindUSB2Controller(
561 IN PDEVICE_OBJECT FdoDevice
);
565 USBPORT_FindCompanionControllers(
566 IN PDEVICE_OBJECT USB2FdoDevice
,
567 IN BOOLEAN IsObRefer
,
568 IN BOOLEAN IsFDOsReturned
);
572 USBPORT_InvalidateControllerHandler(
573 IN PDEVICE_OBJECT FdoDevice
,
580 IN PVOID MiniPortExtension
,
587 USBPORT_TestDebugBreak(
588 IN PVOID MiniPortExtension
);
592 USBPORT_AssertFailure(
593 PVOID MiniPortExtension
,
594 PVOID FailedAssertion
,
602 IN PVOID MiniPortExtension
);
607 IN PVOID MiniPortExtension
,
616 USBPORT_DumpingDeviceDescriptor(
617 IN PUSB_DEVICE_DESCRIPTOR DeviceDescriptor
);
621 USBPORT_DumpingConfiguration(
622 IN PUSB_CONFIGURATION_DESCRIPTOR ConfigDescriptor
);
626 USBPORT_DumpingCapabilities(
627 IN PDEVICE_CAPABILITIES Capabilities
);
631 USBPORT_DumpingSetupPacket(
632 IN PUSB_DEFAULT_PIPE_SETUP_PACKET SetupPacket
);
647 USBPORT_HandleSelectConfiguration(
648 IN PDEVICE_OBJECT FdoDevice
,
654 USBPORT_AddDeviceHandle(
655 IN PDEVICE_OBJECT FdoDevice
,
656 IN PUSBPORT_DEVICE_HANDLE DeviceHandle
);
660 USBPORT_RemoveDeviceHandle(
661 IN PDEVICE_OBJECT FdoDevice
,
662 IN PUSBPORT_DEVICE_HANDLE DeviceHandle
);
666 USBPORT_ValidateDeviceHandle(
667 IN PDEVICE_OBJECT FdoDevice
,
668 IN PUSBPORT_DEVICE_HANDLE DeviceHandle
);
672 USBPORT_CreateDevice(
673 IN OUT PUSB_DEVICE_HANDLE
*pUsbdDeviceHandle
,
674 IN PDEVICE_OBJECT FdoDevice
,
675 IN PUSBPORT_DEVICE_HANDLE HubDeviceHandle
,
676 IN USHORT PortStatus
,
681 USBPORT_InitializeDevice(
682 IN PUSBPORT_DEVICE_HANDLE DeviceHandle
,
683 IN PDEVICE_OBJECT FdoDevice
);
687 USBPORT_GetUsbDescriptor(
688 IN PUSBPORT_DEVICE_HANDLE DeviceHandle
,
689 IN PDEVICE_OBJECT FdoDevice
,
691 IN PUCHAR ConfigDesc
,
692 IN PULONG ConfigDescSize
);
696 USBPORT_HandleSelectInterface(
697 IN PDEVICE_OBJECT FdoDevice
,
703 USBPORT_RemoveDevice(
704 IN PDEVICE_OBJECT FdoDevice
,
705 IN OUT PUSBPORT_DEVICE_HANDLE DeviceHandle
,
710 USBPORT_SendSetupPacket(
711 IN PUSBPORT_DEVICE_HANDLE DeviceHandle
,
712 IN PDEVICE_OBJECT FdoDevice
,
713 IN PUSB_DEFAULT_PIPE_SETUP_PACKET SetupPacket
,
716 IN OUT PULONG TransferedLen
,
717 IN OUT PUSBD_STATUS pUSBDStatus
);
721 USBPORT_RestoreDevice(
722 IN PDEVICE_OBJECT FdoDevice
,
723 IN OUT PUSBPORT_DEVICE_HANDLE OldDeviceHandle
,
724 IN OUT PUSBPORT_DEVICE_HANDLE NewDeviceHandle
);
728 USBPORT_Initialize20Hub(
729 IN PDEVICE_OBJECT FdoDevice
,
730 IN PUSBPORT_DEVICE_HANDLE HubDeviceHandle
,
737 IN PDEVICE_OBJECT FdoDevice
,
738 IN PUSBPORT_DEVICE_HANDLE DeviceHandle
,
739 IN PUSBPORT_PIPE_HANDLE PipeHandle
,
740 IN PUSBD_STATUS UsbdStatus
);
744 MiniportOpenEndpoint(
745 IN PDEVICE_OBJECT FdoDevice
,
746 IN PUSBPORT_ENDPOINT Endpoint
);
751 IN PDEVICE_OBJECT FdoDevice
,
752 IN PUSBPORT_ENDPOINT Endpoint
);
757 IN PUSBPORT_DEVICE_HANDLE DeviceHandle
,
758 IN PDEVICE_OBJECT FdoDevice
,
759 IN PUSBPORT_PIPE_HANDLE PipeHandle
);
763 MiniportCloseEndpoint(
764 IN PDEVICE_OBJECT FdoDevice
,
765 IN PUSBPORT_ENDPOINT Endpoint
);
769 USBPORT_AddPipeHandle(
770 IN PUSBPORT_DEVICE_HANDLE DeviceHandle
,
771 IN PUSBPORT_PIPE_HANDLE PipeHandle
);
775 USBPORT_RemovePipeHandle(
776 IN PUSBPORT_DEVICE_HANDLE DeviceHandle
,
777 IN PUSBPORT_PIPE_HANDLE PipeHandle
);
781 USBPORT_ValidatePipeHandle(
782 IN PUSBPORT_DEVICE_HANDLE DeviceHandle
,
783 IN PUSBPORT_PIPE_HANDLE PipeHandle
);
787 USBPORT_FlushClosedEndpointList(
788 IN PDEVICE_OBJECT FdoDevice
);
792 USBPORT_SetEndpointState(
793 IN PUSBPORT_ENDPOINT Endpoint
,
798 USBPORT_GetEndpointState(
799 IN PUSBPORT_ENDPOINT Endpoint
);
803 USBPORT_InvalidateEndpointHandler(
804 IN PDEVICE_OBJECT FdoDevice
,
805 IN PUSBPORT_ENDPOINT Endpoint
,
810 USBPORT_EndpointWorker(
811 IN PUSBPORT_ENDPOINT Endpoint
,
816 USBPORT_NukeAllEndpoints(
817 IN PDEVICE_OBJECT FdoDevice
);
821 USBPORT_EndpointHasQueuedTransfers(
822 IN PDEVICE_OBJECT FdoDevice
,
823 IN PUSBPORT_ENDPOINT Endpoint
,
824 IN PULONG TransferCount
);
829 USBPORT_PdoQueryInterface(
830 IN PDEVICE_OBJECT FdoDevice
,
831 IN PDEVICE_OBJECT PdoDevice
,
837 USBPORT_PdoDeviceControl(
838 PDEVICE_OBJECT PdoDevice
,
843 USBPORT_FdoDeviceControl(
844 PDEVICE_OBJECT FdoDevice
,
849 USBPORT_FdoInternalDeviceControl(
850 IN PDEVICE_OBJECT FdoDevice
,
855 USBPORT_PdoInternalDeviceControl(
856 IN PDEVICE_OBJECT FdoDevice
,
861 USBPORT_GetSymbolicName(
862 IN PDEVICE_OBJECT RootHubPdo
,
863 IN PUNICODE_STRING DestinationString
);
869 IN PDEVICE_OBJECT FdoDevice
,
875 IN PDEVICE_OBJECT FdoDevice
,
882 IN PDEVICE_OBJECT PdoDevice
,
888 IN PDEVICE_OBJECT FdoDevice
,
893 USBPORT_IdleNotification(
894 IN PDEVICE_OBJECT PdoDevice
,
899 USBPORT_AdjustDeviceCapabilities(
900 IN PDEVICE_OBJECT FdoDevice
,
901 IN PDEVICE_OBJECT PdoDevice
);
905 USBPORT_DoIdleNotificationCallback(
910 USBPORT_CompletePdoWaitWake(
911 IN PDEVICE_OBJECT FdoDevice
);
915 USBPORT_DoSetPowerD0(
916 IN PDEVICE_OBJECT FdoDevice
);
922 IN PVOID DeferredContext
,
923 IN PVOID SystemArgument1
,
924 IN PVOID SystemArgument2
);
928 USBPORT_HcQueueWakeDpc(
929 IN PDEVICE_OBJECT FdoDevice
);
934 USBPORT_InsertIdleIrp(
940 USBPORT_RemoveIdleIrp(
946 USBPORT_PeekNextIdleIrp(
949 IN PVOID PeekContext
);
953 USBPORT_AcquireIdleLock(
959 USBPORT_ReleaseIdleLock(
965 USBPORT_CompleteCanceledIdleIrp(
971 USBPORT_InsertBadRequest(
977 USBPORT_RemoveBadRequest(
983 USBPORT_PeekNextBadRequest(
986 IN PVOID PeekContext
);
990 USBPORT_AcquireBadRequestLock(
996 USBPORT_ReleaseBadRequestLock(
1002 USBPORT_CompleteCanceledBadRequest(
1008 USBPORT_InsertIrpInTable(
1009 IN PUSBPORT_IRP_TABLE IrpTable
,
1014 USBPORT_RemovePendingTransferIrp(
1015 IN PDEVICE_OBJECT FdoDevice
,
1020 USBPORT_RemoveActiveTransferIrp(
1021 IN PDEVICE_OBJECT FdoDevice
,
1026 USBPORT_FindUrbInIrpTable(
1027 IN PUSBPORT_IRP_TABLE IrpTable
,
1033 USBPORT_CancelActiveTransferIrp(
1034 IN PDEVICE_OBJECT DeviceObject
,
1039 USBPORT_FlushAbortList(
1040 IN PUSBPORT_ENDPOINT Endpoint
);
1044 USBPORT_FlushCancelList(
1045 IN PUSBPORT_ENDPOINT Endpoint
);
1049 USBPORT_QueueTransferUrb(
1054 USBPORT_FlushAllEndpoints(
1055 IN PDEVICE_OBJECT FdoDevice
);
1059 USBPORT_FlushPendingTransfers(
1060 IN PUSBPORT_ENDPOINT Endpoint
);
1064 USBPORT_QueueActiveUrbToEndpoint(
1065 IN PUSBPORT_ENDPOINT Endpoint
,
1070 USBPORT_FlushController(
1071 IN PDEVICE_OBJECT FdoDevice
);
1075 USBPORT_BadRequestFlush(
1076 IN PDEVICE_OBJECT FdoDevice
);
1080 USBPORT_AbortEndpoint(
1081 IN PDEVICE_OBJECT FdoDevice
,
1082 IN PUSBPORT_ENDPOINT Endpoint
,
1088 USBPORT_RootHubEndpointWorker(
1089 PUSBPORT_ENDPOINT Endpoint
);
1093 USBPORT_RootHubCreateDevice(
1094 IN PDEVICE_OBJECT FdoDevice
,
1095 IN PDEVICE_OBJECT PdoDevice
);
1099 USBPORT_InvalidateRootHub(
1100 PVOID MiniPortExtension
);
1104 USBPORT_RootHubPowerAndChirpAllCcPorts(
1105 IN PDEVICE_OBJECT FdoDevice
);
1110 USBPORT_HandleSubmitURB(
1111 IN PDEVICE_OBJECT PdoDevice
,
1118 USBPORT_AllocateBandwidthUSB2(
1119 IN PDEVICE_OBJECT FdoDevice
,
1120 IN PUSBPORT_ENDPOINT Endpoint
);
1124 USBPORT_FreeBandwidthUSB2(
1125 IN PDEVICE_OBJECT FdoDevice
,
1126 IN PUSBPORT_ENDPOINT Endpoint
);
1128 #endif /* USBPORT_H__ */