2 * PROJECT: ReactOS Universal Serial Bus Bulk Enhanced Host Controller Interface
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: drivers/usb/usbehci/usb_queue.cpp
5 * PURPOSE: USB EHCI device driver.
7 * Michael Martin (michael.martin@reactos.org)
8 * Johannes Anderwald (johannes.anderwald@reactos.org)
14 class CUSBQueue
: public IUSBQueue
17 STDMETHODIMP
QueryInterface( REFIID InterfaceId
, PVOID
* Interface
);
19 STDMETHODIMP_(ULONG
) AddRef()
21 InterlockedIncrement(&m_Ref
);
24 STDMETHODIMP_(ULONG
) Release()
26 InterlockedDecrement(&m_Ref
);
36 NTSTATUS
Initialize(IN PUSBHARDWAREDEVICE Hardware
, PADAPTER_OBJECT AdapterObject
, IN OPTIONAL PKSPIN_LOCK Lock
);
37 ULONG
GetPendingRequestCount();
38 NTSTATUS
AddUSBRequest(PURB Urb
);
39 NTSTATUS
AddUSBRequest(IUSBRequest
* Request
);
40 NTSTATUS
CancelRequests();
41 NTSTATUS
CreateUSBRequest(IUSBRequest
**OutRequest
);
43 // constructor / destructor
44 CUSBQueue(IUnknown
*OuterUnknown
){}
45 virtual ~CUSBQueue(){}
49 PDMA_ADAPTER m_Adapter
;
50 PQUEUE_HEAD ExecutingList
;
51 PQUEUE_HEAD PendingList
;
52 IDMAMemoryManager
*m_MemoryManager
;
55 //=================================================================================================
60 CUSBQueue::QueryInterface(
64 if (IsEqualGUIDAligned(refiid
, IID_IUnknown
))
66 *Output
= PVOID(PUNKNOWN(this));
67 PUNKNOWN(*Output
)->AddRef();
68 return STATUS_SUCCESS
;
71 return STATUS_UNSUCCESSFUL
;
75 CUSBQueue::Initialize(
76 IN PUSBHARDWAREDEVICE Hardware
,
77 PADAPTER_OBJECT AdapterObject
,
78 IN OPTIONAL PKSPIN_LOCK Lock
)
83 ASSERT(AdapterObject
);
85 Status
= CreateDMAMemoryManager(&m_MemoryManager
);
86 if (!NT_SUCCESS(Status
))
88 DPRINT1("Failed to create DMAMemoryManager Object\n");
92 return STATUS_SUCCESS
;
96 CUSBQueue::GetPendingRequestCount()
103 CUSBQueue::AddUSBRequest(
104 IUSBRequest
* Request
)
107 return STATUS_NOT_IMPLEMENTED
;
111 CUSBQueue::AddUSBRequest(
115 return STATUS_NOT_IMPLEMENTED
;
119 CUSBQueue::CancelRequests()
122 return STATUS_NOT_IMPLEMENTED
;
126 CUSBQueue::CreateUSBRequest(
127 IUSBRequest
**OutRequest
)
130 return STATUS_NOT_IMPLEMENTED
;
135 PUSBQUEUE
*OutUsbQueue
)
140 // allocate controller
142 This
= new(NonPagedPool
, TAG_USBEHCI
) CUSBQueue(0);
146 // failed to allocate
148 return STATUS_INSUFFICIENT_RESOURCES
;
152 // add reference count
159 *OutUsbQueue
= (PUSBQUEUE
)This
;
164 return STATUS_SUCCESS
;