Lines Matching refs:transfer

360 	// Create a lock for the isochronous transfer list
901 EHCI::StartDebugTransfer(Transfer *transfer)
909 Pipe *pipe = transfer->TransferPipe();
917 result = FillQueueWithRequest(transfer, transferData.queue_head,
920 result = FillQueueWithData(transfer, transferData.queue_head,
934 // we abuse the callback cookie to hold our transfer data
935 transfer->SetCallback(NULL, &transferData);
975 EHCI::CheckDebugTransfer(Transfer *transfer)
979 transfer_data *transferData = (transfer_data *)transfer->CallbackCookie();
1025 generic_io_vec *vector = transfer->Vector();
1026 size_t vectorCount = transfer->VectorCount();
1029 vector, vectorCount, transfer->IsPhysical(), &nextDataToggle);
1033 transfer->TransferPipe()->SetDataToggle(nextDataToggle);
1036 CleanupDebugTransfer(transfer);
1042 EHCI::CancelDebugTransfer(Transfer *transfer)
1044 transfer_data *transferData = (transfer_data *)transfer->CallbackCookie();
1053 transfer->Finished(B_CANCELED, 0);
1054 CleanupDebugTransfer(transfer);
1059 EHCI::CleanupDebugTransfer(Transfer *transfer)
1061 transfer_data *transferData = (transfer_data *)transfer->CallbackCookie();
1086 EHCI::SubmitTransfer(Transfer *transfer)
1089 if (transfer->TransferPipe()->DeviceAddress() == fRootHubAddress)
1090 return fRootHub->ProcessTransfer(this, transfer);
1092 Pipe *pipe = transfer->TransferPipe();
1094 return SubmitIsochronous(transfer);
1096 status_t result = transfer->InitKernelAccess();
1116 result = FillQueueWithRequest(transfer, queueHead, &dataDescriptor,
1119 result = FillQueueWithData(transfer, queueHead, &dataDescriptor,
1124 TRACE_ERROR("failed to fill transfer queue with data\n");
1129 result = AddPendingTransfer(transfer, queueHead, dataDescriptor,
1132 TRACE_ERROR("failed to add pending transfer\n");
1158 EHCI::SubmitIsochronous(Transfer *transfer)
1160 Pipe *pipe = transfer->TransferPipe();
1162 usb_isochronous_data *isochronousData = transfer->IsochronousData();
1163 size_t packetSize = transfer->DataLength();
1176 status_t result = transfer->InitKernelAccess();
1182 uint16 bandwidth = transfer->Bandwidth() / isochronousData->packet_count;
1184 TRACE("isochronous transfer descriptor bandwidth %d\n", bandwidth);
1186 // The following holds the list of transfer descriptor of the
1189 // other in a queue like for every other transfer.
1199 ", restSize=%" B_PRIuSIZE "\n", transfer->DataLength(),
1236 size_t dataLength = transfer->DataLength();
1304 // Add transfer to the list
1305 result = AddPendingIsochronousTransfer(transfer, isoRequest,
1307 transfer->DataLength());
1309 TRACE_ERROR("failed to add pending isochronous transfer\n");
1316 TRACE("appended isochronous transfer by starting at frame number %d\n",
1331 // Simply check every last descriptor of the isochronous transfer list
1332 isochronous_transfer_data *transfer = fFirstIsochronousTransfer;
1333 if (transfer) {
1334 while (transfer->descriptors[transfer->last_to_process]
1336 transfer = transfer->link;
1337 if (!transfer)
1341 return transfer;
1595 TRACE("transfer finished\n");
1601 TRACE("transfer error\n");
1653 EHCI::AddPendingTransfer(Transfer *transfer, ehci_qh *queueHead,
1660 data->transfer = transfer;
1675 if (it->transfer && it->transfer->TransferPipe() == transfer->TransferPipe()
1676 && it->transfer->IsFragmented()) {
1677 TRACE_ERROR("cannot submit transfer: a fragmented transfer is queued\n");
1700 EHCI::AddPendingIsochronousTransfer(Transfer *transfer, ehci_itd **isoRequest,
1704 if (!transfer || !isoRequest)
1712 data->transfer = transfer;
1722 // Put in the isochronous transfer list
1749 Transfer * transfer;
1756 if (current->transfer && current->transfer->TransferPipe() == pipe) {
1765 // if the transfer is canceled by force, the one causing the
1766 // cancel is probably not the one who initiated the transfer
1771 entry->transfer = current->transfer;
1772 current->transfer = NULL;
1788 list->transfer->Finished(B_CANCELED, 0);
1789 delete list->transfer;
1810 if (current->transfer->TransferPipe() == pipe) {
1821 TRACE_ERROR("no isochronous transfer found!\n");
1832 transfer_data *transfer = fFirstTransfer;
1833 while (transfer) {
1834 transfer->transfer->Finished(B_CANCELED, 0);
1835 delete transfer->transfer;
1837 transfer_data *next = transfer->link;
1838 delete transfer;
1839 transfer = next;
1877 transfer_data *transfer = fFirstTransfer;
1880 while (transfer) {
1882 ehci_qtd *descriptor = transfer->queue_head->element_log;
1895 // a transfer error occured
1905 callbackStatus = transfer->incoming
1913 if ((transfer->queue_head->endpoint_chars
1933 callbackStatus = transfer->incoming
1966 // no alternate next, transfer is done
1976 lastTransfer = transfer;
1977 transfer = transfer->link;
1981 // remove the transfer from the list first so we are sure
1983 transfer_data *next = transfer->link;
1986 lastTransfer->link = transfer->link;
1988 if (transfer == fFirstTransfer)
1989 fFirstTransfer = transfer->link;
1990 if (transfer == fLastTransfer)
1995 if (!transfer->canceled)
1996 fProcessingPipe = transfer->transfer->TransferPipe();
1998 transfer->link = NULL;
2003 if (!transfer->canceled) {
2008 if (transfer->data_descriptor && transfer->incoming) {
2010 generic_io_vec *vector = transfer->transfer->Vector();
2011 size_t vectorCount = transfer->transfer->VectorCount();
2012 callbackStatus = transfer->transfer->PrepareKernelAccess();
2015 transfer->data_descriptor,
2016 vector, vectorCount, transfer->transfer->IsPhysical(),
2019 } else if (transfer->data_descriptor) {
2022 transfer->data_descriptor, &nextDataToggle);
2025 transfer->transfer->TransferPipe()->SetDataToggle(
2029 if (callbackStatus == B_OK && transfer->transfer->IsFragmented()) {
2030 // this transfer may still have data left
2031 transfer->transfer->AdvanceByFragment(actualLength);
2032 if (transfer->transfer->FragmentLength() > 0) {
2033 FreeDescriptorChain(transfer->data_descriptor);
2035 transfer->transfer,
2036 transfer->queue_head,
2037 &transfer->data_descriptor, NULL, true);
2040 // reappend the transfer
2042 fLastTransfer->link = transfer;
2044 fFirstTransfer = transfer;
2046 fLastTransfer = transfer;
2049 transfer = next;
2054 // the transfer is done, but we already set the
2059 transfer->transfer->Finished(callbackStatus, actualLength);
2063 // unlink hardware queue and delete the transfer
2064 UnlinkQueueHead(transfer->queue_head, &fFreeListHead);
2065 delete transfer->transfer;
2066 delete transfer;
2067 transfer = next;
2125 * of a transfer, it processes the entire transfer.
2140 // Process the frame list until one transfer is processed
2174 // Process the transfer if we found the last descriptor
2175 isochronous_transfer_data *transfer
2178 // belongs to an inbound transfer. If the transfer is not
2181 if (transfer && transfer->is_active) {
2182 TRACE("FinishIsochronousTransfers active transfer\n");
2186 status = transfer->transfer->PrepareKernelAccess();
2188 actualLength = ReadIsochronousDescriptorChain(transfer);
2191 // Remove the transfer
2192 if (transfer == fFirstIsochronousTransfer) {
2193 fFirstIsochronousTransfer = transfer->link;
2194 if (transfer == fLastIsochronousTransfer)
2199 while (temp != NULL && transfer != temp->link)
2202 if (transfer == fLastIsochronousTransfer)
2207 transfer->link = NULL;
2209 transfer->transfer->Finished(status, actualLength);
2213 for (uint32 i = 0; i <= transfer->last_to_process; i++)
2214 FreeDescriptor(transfer->descriptors[i]);
2218 delete [] transfer->descriptors;
2219 delete transfer->transfer;
2220 fStack->FreeChunk(transfer->buffer_log,
2221 (phys_addr_t)transfer->buffer_phy,
2222 transfer->buffer_size);
2223 delete transfer;
2226 TRACE("FinishIsochronousTransfers not end of transfer\n");
2432 EHCI::FillQueueWithRequest(Transfer *transfer, ehci_qh *queueHead,
2435 Pipe *pipe = transfer->TransferPipe();
2436 usb_request_data *requestData = transfer->RequestData();
2460 if (transfer->VectorCount() > 0) {
2463 &lastDescriptor, statusDescriptor, transfer->FragmentLength(),
2474 result = transfer->PrepareKernelAccess();
2481 WriteDescriptorChain(dataDescriptor, transfer->Vector(),
2482 transfer->VectorCount(), transfer->IsPhysical());
2503 EHCI::FillQueueWithData(Transfer *transfer, ehci_qh *queueHead,
2506 Pipe *pipe = transfer->TransferPipe();
2513 &lastDescriptor, strayDescriptor, transfer->FragmentLength(),
2522 result = transfer->PrepareKernelAccess();
2528 WriteDescriptorChain(firstDescriptor, transfer->Vector(),
2529 transfer->VectorCount(), transfer->IsPhysical());
2932 EHCI::WriteIsochronousDescriptorChain(isochronous_transfer_data *transfer)
2940 EHCI::ReadIsochronousDescriptorChain(isochronous_transfer_data *transfer)
2942 generic_io_vec *vector = transfer->transfer->Vector();
2943 size_t vectorCount = transfer->transfer->VectorCount();
2944 const bool physical = transfer->transfer->IsPhysical();
2948 = transfer->transfer->IsochronousData();
2953 size_t packetSize = transfer->transfer->DataLength();
2956 for (uint32 i = 0; i <= transfer->last_to_process; i++) {
2957 ehci_itd *itd = transfer->descriptors[i];
2984 (generic_addr_t)transfer->buffer_log + bufferOffset, false, length);
3020 if (bufferOffset >= transfer->buffer_size)