mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 18:52:57 +00:00
[USBEHCI_NEW]
- Create member for storing the request object - Add interface function which is invoked when the queue head should be freed - Add support functions which deal with completed queue heads svn path=/branches/usb-bringup/; revision=51440
This commit is contained in:
parent
4dff45da57
commit
982eb59ba0
4 changed files with 227 additions and 0 deletions
|
@ -46,6 +46,7 @@ public:
|
|||
virtual VOID GetResultStatus(OUT OPTIONAL NTSTATUS *NtStatusCode, OUT OPTIONAL PULONG UrbStatusCode);
|
||||
virtual BOOLEAN IsRequestInitialized();
|
||||
virtual BOOLEAN ShouldReleaseRequestAfterCompletion();
|
||||
virtual VOID FreeQueueHead(struct _QUEUE_HEAD * QueueHead);
|
||||
|
||||
// local functions
|
||||
ULONG InternalGetTransferType();
|
||||
|
@ -416,6 +417,11 @@ CUSBRequest::GetQueueHead(
|
|||
// store queue head
|
||||
//
|
||||
m_QueueHead = *OutHead;
|
||||
|
||||
//
|
||||
// store request object
|
||||
//
|
||||
(*OutHead)->Request = PVOID(this);
|
||||
}
|
||||
|
||||
//
|
||||
|
@ -936,6 +942,58 @@ CUSBRequest::ShouldReleaseRequestAfterCompletion()
|
|||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------------------
|
||||
VOID
|
||||
CUSBRequest::FreeQueueHead(
|
||||
IN struct _QUEUE_HEAD * QueueHead)
|
||||
{
|
||||
//
|
||||
// FIXME: support chained queue heads
|
||||
//
|
||||
PC_ASSERT(QueueHead == m_QueueHead);
|
||||
|
||||
//
|
||||
// release queue head
|
||||
//
|
||||
m_DmaManager->Release(QueueHead, sizeof(QUEUE_HEAD));
|
||||
|
||||
//
|
||||
// nullify pointer
|
||||
//
|
||||
m_QueueHead = 0;
|
||||
|
||||
//
|
||||
// release transfer descriptors
|
||||
//
|
||||
|
||||
if (m_TransferDescriptors[0])
|
||||
{
|
||||
//
|
||||
// release transfer descriptors
|
||||
//
|
||||
m_DmaManager->Release(m_TransferDescriptors[0], sizeof(QUEUE_TRANSFER_DESCRIPTOR));
|
||||
m_TransferDescriptors[0] = 0;
|
||||
}
|
||||
|
||||
if (m_TransferDescriptors[1])
|
||||
{
|
||||
//
|
||||
// release transfer descriptors
|
||||
//
|
||||
m_DmaManager->Release(m_TransferDescriptors[1], sizeof(QUEUE_TRANSFER_DESCRIPTOR));
|
||||
m_TransferDescriptors[1] = 0;
|
||||
}
|
||||
|
||||
if (m_TransferDescriptors[2])
|
||||
{
|
||||
//
|
||||
// release transfer descriptors
|
||||
//
|
||||
m_DmaManager->Release(m_TransferDescriptors[2], sizeof(QUEUE_TRANSFER_DESCRIPTOR));
|
||||
m_TransferDescriptors[2] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
InternalCreateUSBRequest(
|
||||
PUSBREQUEST *OutRequest)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue