diff --git a/drivers/usb/usbohci/usb_queue.cpp b/drivers/usb/usbohci/usb_queue.cpp index 871a3b0d9f3..912da270fe7 100644 --- a/drivers/usb/usbohci/usb_queue.cpp +++ b/drivers/usb/usbohci/usb_queue.cpp @@ -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 // diff --git a/drivers/usb/usbohci/usb_request.cpp b/drivers/usb/usbohci/usb_request.cpp index b4681b70019..38fdfd57101 100644 --- a/drivers/usb/usbohci/usb_request.cpp +++ b/drivers/usb/usbohci/usb_request.cpp @@ -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 //