101 DPRINT1(
"[USBOHCI] Failed to initialize queue\n");
228 m_Hardware->GetCurrentFrameNumber(&FrameNumber);
240 DPRINT(
"ISO: NextFrameNumber %x\n", FrameNumber);
241 Frame = (FrameNumber & 0xFFFF);
243 while(CurrentDescriptor)
264 m_Hardware->GetCurrentFrameNumber(&FrameNumber);
302 CUSBQueue::AddUSBRequest(
309 DPRINT(
"CUSBQueue::AddUSBRequest\n");
334 DPRINT1(
"CUSBQueue::AddUSBRequest GetEndpointDescriptor failed with %x\n",
Status);
352 CUSBQueue::CreateUSBRequest(
353 IUSBRequest **OutRequest)
363 *OutRequest = UsbRequest;
372 IN ULONG TransferDescriptorLogicalAddress,
384 while(EndpointDescriptor)
394 *OutEndpointDescriptor = EndpointDescriptor;
395 *OutPreviousEndpointDescriptor = LastDescriptor;
406 LastDescriptor = EndpointDescriptor;
452 IN ULONG TransferDescriptorLogicalAddress,
465 while(EndpointDescriptor)
475 *OutEndpointDescriptor = EndpointDescriptor;
476 *OutPreviousEndpointDescriptor = LastDescriptor;
487 LastDescriptor = EndpointDescriptor;
504 IN ULONG TransferDescriptorLogicalAddress)
520 if (
Descriptor->PhysicalAddress.LowPart == TransferDescriptorLogicalAddress)
544 IN ULONG TransferDescriptorLogicalAddress)
560 if (
Descriptor->PhysicalAddress.LowPart == TransferDescriptorLogicalAddress)
634 Request->FreeEndpointDescriptor(EndpointDescriptor);
656 DPRINT1(
"Unable to create a new QueueHead\n");
667 DPRINT1(
"URB failed with status 0x%x\n", UrbStatus);
674 Request->FreeEndpointDescriptor(EndpointDescriptor);
699 while(EndpointDescriptor)
712 CUSBQueue::TransferDescriptorCompletionCallback(
713 ULONG TransferDescriptorLogicalAddress)
719 DPRINT(
"CUSBQueue::TransferDescriptorCompletionCallback transfer descriptor %x\n", TransferDescriptorLogicalAddress);
783 DPRINT(
"ISO endpoint complete\n");
835 UCHAR InterruptInterval)
853 if (Power * 2 > InterruptInterval)
867 DPRINT(
"InterruptInterval %lu Selected InterruptIndex %lu Chosen Interval %lu\n", InterruptInterval,
Index, Power);
877 CUSBQueue::AbortDevicePipe(
936 while(CurrentDescriptor)
949 CurrentDescriptor = TempDescriptor;
952 if (!CurrentDescriptor)
958 ASSERT(TransferDescriptor);
971 CurrentDescriptor = TempDescriptor;
975 if (!CurrentDescriptor)
978 PreviousDescriptor = CurrentDescriptor;
#define OHCI_ENDPOINT_GET_ENDPOINT_NUMBER(s)
#define OHCI_STATIC_ENDPOINT_COUNT
#define STATUS_INSUFFICIENT_RESOURCES
IUSBHardwareDevice * PUSBHARDWAREDEVICE
#define STATUS_NOT_IMPLEMENTED
#define OHCI_ITD_GET_FRAME_COUNT(x)
#define OHCI_ENDPOINT_HEAD_MASK
STDMETHODIMP_(ULONG) Release()
VOID NTAPI KeAcquireSpinLockAtDpcLevel(IN PKSPIN_LOCK SpinLock)
struct _OHCI_ISO_TD_ * POHCI_ISO_TD
LIST_ENTRY DescriptorListEntry
POHCI_ENDPOINT_DESCRIPTOR m_ControlHeadEndpointDescriptor
#define USB_ENDPOINT_TYPE_CONTROL
POHCI_ENDPOINT_DESCRIPTOR FindInterruptEndpointDescriptor(UCHAR InterruptInterval)
VOID PrintEndpointList(POHCI_ENDPOINT_DESCRIPTOR EndpointDescriptor)
#define InsertTailList(ListHead, Entry)
NTSTATUS FindTransferDescriptorInEndpoint(IN POHCI_ENDPOINT_DESCRIPTOR EndpointDescriptor, IN ULONG TransferDescriptorLogicalAddress, OUT POHCI_ENDPOINT_DESCRIPTOR *OutEndpointDescriptor, OUT POHCI_ENDPOINT_DESCRIPTOR *OutPreviousEndpointDescriptor)
POHCI_ENDPOINT_DESCRIPTOR m_IsoHeadEndpointDescriptor
#define OHCI_ENDPOINT_GET_DEVICE_ADDRESS(s)
_Must_inspect_result_ FORCEINLINE BOOLEAN IsListEmpty(_In_ const LIST_ENTRY *ListHead)
#define IsEqualGUIDAligned(guid1, guid2)
LIST_ENTRY m_PendingRequestList
struct OHCI_GENERAL_TD * POHCI_GENERAL_TD
#define USBD_STATUS_INSUFFICIENT_RESOURCES
_In_ NDIS_HANDLE _In_ PNDIS_REQUEST Request
ULONG TailPhysicalDescriptor
PVOID HeadLogicalDescriptor
POHCIHARDWAREDEVICE m_Hardware
#define OHCI_ENDPOINT_HALTED
POHCI_ENDPOINT_DESCRIPTOR * m_InterruptEndpoints
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
_In_ PUSB_DEVICE_HANDLE _Out_ PUSHORT DeviceAddress
PEHCIHARDWAREDEVICE m_Hardware
NTSTATUS FindTransferDescriptorInIsochronousHeadEndpoints(IN ULONG TransferDescriptorLogicalAddress, OUT POHCI_ENDPOINT_DESCRIPTOR *OutEndpointDescriptor, OUT POHCI_ENDPOINT_DESCRIPTOR *OutPreviousEndpointDescriptor)
FORCEINLINE VOID KeInitializeSpinLock(_Out_ PKSPIN_LOCK SpinLock)
#define OHCI_BIGGEST_INTERVAL
FORCEINLINE PLIST_ENTRY RemoveHeadList(_Inout_ PLIST_ENTRY ListHead)
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
NTSTATUS NTAPI CreateUSBQueue(PUSBQUEUE *OutUsbQueue)
STDMETHODIMP QueryInterface(REFIID InterfaceId, PVOID *Interface)
#define OHCI_ITD_SET_STARTING_FRAME(x)
#define USB_ENDPOINT_TYPE_MASK
VOID LinkEndpoint(POHCI_ENDPOINT_DESCRIPTOR HeadEndpointDescriptor, POHCI_ENDPOINT_DESCRIPTOR EndpointDescriptor)
STDMETHODIMP_(ULONG) AddRef()
IN PVOID IN PVOID IN USHORT IN USHORT IN PINTERFACE Interface
ULONG HeadPhysicalDescriptor
IOHCIRequest * POHCIREQUEST
#define NT_SUCCESS(StatCode)
#define OHCI_ENDPOINT_SKIP
VOID NTAPI KeReleaseSpinLockFromDpcLevel(IN PKSPIN_LOCK SpinLock)
#define KeAcquireSpinLock(sl, irql)
static const UCHAR Index[8]
#define STDMETHODCALLTYPE
CUSBQueue(IUnknown *OuterUnknown)
#define USB_ENDPOINT_TYPE_ISOCHRONOUS
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel) ?(CompletionRoutine !=NULL) :TRUE)
#define STATUS_UNSUCCESSFUL
#define USBD_STATUS_SUCCESS
BOOLEAN IsTransferDescriptorInIsoEndpoint(IN POHCI_ENDPOINT_DESCRIPTOR EndpointDescriptor, IN ULONG TransferDescriptorLogicalAddress)
#define IMP_IUSBOHCIQUEUE
#define InterlockedDecrement
IN OUT PLONG IN OUT PLONG Addend IN OUT PLONG IN LONG IN OUT PLONG IN LONG Increment IN PNDIS_RW_LOCK Lock
#define USB_ENDPOINT_TYPE_BULK
#define USBD_STATUS_STALL_PID
NTSTATUS FindTransferDescriptorInInterruptHeadEndpoints(IN ULONG TransferDescriptorLogicalAddress, OUT POHCI_ENDPOINT_DESCRIPTOR *OutEndpointDescriptor, OUT POHCI_ENDPOINT_DESCRIPTOR *OutPreviousEndpointDescriptor)
VOID CleanupEndpointDescriptor(POHCI_ENDPOINT_DESCRIPTOR EndpointDescriptor, POHCI_ENDPOINT_DESCRIPTOR PreviousEndpointDescriptor)
ULONG NextPhysicalEndpoint
#define InterlockedIncrement
struct _OHCI_ENDPOINT_DESCRIPTOR * POHCI_ENDPOINT_DESCRIPTOR
IMP_IUSBQUEUE IMP_IUSBOHCIQUEUE BOOLEAN IsTransferDescriptorInEndpoint(IN POHCI_ENDPOINT_DESCRIPTOR EndpointDescriptor, IN ULONG TransferDescriptorLogicalAddress)
#define InitializeListHead(ListHead)
IUSBRequest * PUSBREQUEST
POHCI_ENDPOINT_DESCRIPTOR m_BulkHeadEndpointDescriptor
BOOL Initialize(HINSTANCE hInstance)
IOHCIHardwareDevice * POHCIHARDWAREDEVICE
IDMAMemoryManager * PDMAMEMORYMANAGER
#define KeReleaseSpinLock(sl, irql)
static ULONG WINAPI AddRef(IStream *iface)
PHYSICAL_ADDRESS PhysicalAddress
NTSTATUS NTAPI InternalCreateUSBRequest(PUSBREQUEST *OutRequest)
struct _OHCI_ISO_TD_ * NextLogicalDescriptor
VOID AddEndpointDescriptor(IN POHCI_ENDPOINT_DESCRIPTOR Descriptor)
base of all file and directory entries
#define USB_ENDPOINT_TYPE_INTERRUPT
_In_ PSTORAGE_PROPERTY_ID _Outptr_ PSTORAGE_DESCRIPTOR_HEADER * Descriptor
PULONG MinorVersion OPTIONAL