[USBOHCI]

- Don't allocate buffer twice
- Cleanup endpoint / general transfer descriptors

svn path=/branches/usb-bringup/; revision=51892
This commit is contained in:
Johannes Anderwald
2011-05-24 18:29:57 +00:00
parent e24bfbfa91
commit ed6fad617e
2 changed files with 45 additions and 2 deletions
+3 -1
View File
@@ -167,6 +167,8 @@ CUSBQueue::AddUSBRequest(
//
// request not supported, please try later
//
DPRINT1("Request Type %x not supported\n", Type);
ASSERT(FALSE);
return Status;
}
@@ -389,7 +391,7 @@ CUSBQueue::TransferDescriptorCompletionCallback(
//
// FIXME: check if complete
//
ASSERT(Request->IsRequestComplete());
//
// release request
//
+42 -1
View File
@@ -706,7 +706,7 @@ CUSBRequest::BuildControlTransferDescriptor(
//
// now create the data descriptor
//
Status = CreateGeneralTransferDescriptor(&DataDescriptor, m_TransferBufferLength);
Status = CreateGeneralTransferDescriptor(&DataDescriptor, 0);
if (!NT_SUCCESS(Status))
{
//
@@ -924,6 +924,8 @@ VOID
CUSBRequest::CompletionCallback(
struct _OHCI_ENDPOINT_DESCRIPTOR * OutDescriptor)
{
POHCI_GENERAL_TD TransferDescriptor, NextTransferDescriptor;
DPRINT1("CUSBRequest::CompletionCallback\n");
//
@@ -938,6 +940,45 @@ CUSBRequest::CompletionCallback(
// FIXME: cleanup descriptors
//
//
// get first general transfer descriptor
//
TransferDescriptor = (POHCI_GENERAL_TD)OutDescriptor->HeadLogicalDescriptor;
while(TransferDescriptor)
{
//
// get next
//
NextTransferDescriptor = (POHCI_GENERAL_TD)TransferDescriptor->NextLogicalDescriptor;
//
// is there a buffer associated
//
if (TransferDescriptor->BufferSize)
{
//
// release buffer
//
m_DmaManager->Release(TransferDescriptor->BufferLogical, TransferDescriptor->BufferSize);
}
//
// release descriptor
//
m_DmaManager->Release(TransferDescriptor, sizeof(OHCI_GENERAL_TD));
//
// move to next
//
TransferDescriptor = NextTransferDescriptor;
}
//
// release endpoint descriptor
//
m_DmaManager->Release(OutDescriptor, sizeof(OHCI_ENDPOINT_DESCRIPTOR));
//
// signal completion event
//