Implemented transfer cancelling for EHCI by reworking the previously unused CancelPendingTransfer() into CancelQueuedTransfers() with the pipe based semantic.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21044 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Michael Lotz
2007-05-06 15:55:26 +00:00
parent 3dc77d1dc9
commit 4b3d0fcfda
2 changed files with 5 additions and 6 deletions
+4 -5
View File
@@ -903,7 +903,7 @@ EHCI::AddPendingTransfer(Transfer *transfer, ehci_qh *queueHead,
status_t
EHCI::CancelPendingTransfer(Transfer *transfer)
EHCI::CancelQueuedTransfers(Pipe *pipe)
{
if (!Lock())
return B_ERROR;
@@ -911,7 +911,8 @@ EHCI::CancelPendingTransfer(Transfer *transfer)
transfer_data *last = NULL;
transfer_data *current = fFirstTransfer;
while (current) {
if (current->transfer == transfer) {
if (current->transfer->TransferPipe() == pipe) {
UnlinkQueueHead(current->queue_head, &fFreeListHead);
current->transfer->Finished(B_CANCELED, 0);
delete current->transfer;
@@ -924,8 +925,6 @@ EHCI::CancelPendingTransfer(Transfer *transfer)
fLastTransfer = last;
delete current;
Unlock();
return B_OK;
}
last = current;
@@ -933,7 +932,7 @@ EHCI::CancelPendingTransfer(Transfer *transfer)
}
Unlock();
return B_BAD_VALUE;
return B_OK;
}
+1 -1
View File
@@ -37,6 +37,7 @@ public:
virtual status_t SubmitTransfer(Transfer *transfer);
status_t SubmitPeriodicTransfer(Transfer *transfer);
status_t SubmitAsyncTransfer(Transfer *transfer);
virtual status_t CancelQueuedTransfers(Pipe *pipe);
virtual status_t NotifyPipeChange(Pipe *pipe,
usb_change change);
@@ -66,7 +67,6 @@ static int32 InterruptHandler(void *data);
ehci_qh *queueHead,
ehci_qtd *dataDescriptor,
bool directionIn);
status_t CancelPendingTransfer(Transfer *transfer);
status_t CancelAllPendingTransfers();
static int32 FinishThread(void *data);