Lines Matching defs:transfer

651 OHCI::SubmitTransfer(Transfer *transfer)
654 if (transfer->TransferPipe()->DeviceAddress() == fRootHubAddress)
655 return fRootHub->ProcessTransfer(this, transfer);
657 uint32 type = transfer->TransferPipe()->Type();
660 return _SubmitRequest(transfer);
664 TRACE("submitting %s transfer\n",
666 return _SubmitTransfer(transfer);
670 TRACE("submitting isochronous transfer\n");
671 return _SubmitIsochronousTransfer(transfer);
674 TRACE_ERROR("tried to submit transfer for unknown pipe type %" B_PRIu32 "\n",
687 Transfer * transfer;
694 if (current->transfer && current->transfer->TransferPipe() == pipe) {
718 // this is the last ITD of the transfer
727 // If the transfer is canceled by force, the one causing the
728 // cancel is probably not the one who initiated the transfer
733 entry->transfer = current->transfer;
734 current->transfer = NULL;
748 list->transfer->Finished(B_CANCELED, 0);
749 delete list->transfer;
961 TRACE_MODULE("transfer descriptors processed\n");
1001 OHCI::_AddPendingTransfer(Transfer *transfer,
1006 if (!transfer || !endpoint || !lastDescriptor)
1013 status_t result = transfer->InitKernelAccess();
1019 data->transfer = transfer;
1058 OHCI::_AddPendingIsochronousTransfer(Transfer *transfer,
1062 if (!transfer || !endpoint || !lastDescriptor)
1069 status_t result = transfer->InitKernelAccess();
1075 data->transfer = transfer;
1134 TRACE("finishing transfers (first transfer: %p; last"
1135 " transfer: %p)\n", fFirstTransfer, fLastTransfer);
1137 transfer_data *transfer = fFirstTransfer;
1140 while (transfer) {
1142 ohci_general_td *descriptor = transfer->first_descriptor;
1143 ohci_endpoint_descriptor *endpoint = transfer->endpoint;
1147 transfer_data *next = transfer->link;
1148 if (_FinishIsochronousTransfer(transfer, &lastTransfer)) {
1149 delete transfer->transfer;
1150 delete transfer;
1152 transfer = next;
1166 lastTransfer = transfer;
1167 transfer = transfer->link;
1173 while (descriptor && !transfer->canceled) {
1207 if (descriptor == transfer->last_descriptor
1209 // this is the last td of the transfer or a short packet
1219 if (transfer->canceled) {
1220 // when a transfer is canceled, all transfers to that endpoint
1230 lastTransfer = transfer;
1231 transfer = transfer->link;
1235 // remove the transfer from the list first so we are sure
1237 transfer_data *next = transfer->link;
1240 lastTransfer->link = transfer->link;
1242 if (transfer == fFirstTransfer)
1243 fFirstTransfer = transfer->link;
1244 if (transfer == fLastTransfer)
1249 if (!transfer->canceled)
1250 fProcessingPipe = transfer->transfer->TransferPipe();
1252 transfer->link = NULL;
1257 transfer->last_descriptor->next_logical_descriptor = NULL;
1258 TRACE("transfer %p done with status 0x%08" B_PRIx32 "\n",
1259 transfer, callbackStatus);
1262 if (!transfer->canceled) {
1265 if (transfer->data_descriptor && transfer->incoming) {
1267 generic_io_vec *vector = transfer->transfer->Vector();
1268 size_t vectorCount = transfer->transfer->VectorCount();
1270 transfer->transfer->PrepareKernelAccess();
1272 transfer->data_descriptor,
1273 vector, vectorCount, transfer->transfer->IsPhysical());
1274 } else if (transfer->data_descriptor) {
1277 transfer->data_descriptor);
1281 transfer->transfer->TransferPipe()->SetDataToggle(
1285 if (transfer->transfer->IsFragmented()) {
1286 // this transfer may still have data left
1287 TRACE("advancing fragmented transfer\n");
1288 transfer->transfer->AdvanceByFragment(actualLength);
1289 if (transfer->transfer->FragmentLength() > 0) {
1290 TRACE("still %ld bytes left on transfer\n",
1291 transfer->transfer->FragmentLength());
1292 // TODO actually resubmit the transfer
1295 // the transfer is done, but we already set the
1301 transfer->transfer->Finished(callbackStatus, actualLength);
1306 // remove the transfer and make the head pointer valid again
1308 _RemoveTransferFromEndpoint(transfer);
1312 _FreeDescriptorChain(transfer->first_descriptor);
1314 delete transfer->transfer;
1315 delete transfer;
1316 transfer = next;
1323 OHCI::_FinishIsochronousTransfer(transfer_data *transfer,
1330 if (transfer->canceled)
1335 = (ohci_isochronous_td *)transfer->first_descriptor;
1340 *_lastTransfer = transfer;
1344 if (descriptor == (ohci_isochronous_td*)transfer->last_descriptor) {
1345 // this is the last ITD of the transfer
1346 descriptor = (ohci_isochronous_td *)transfer->first_descriptor;
1368 = transfer->transfer->IsochronousData();
1385 if (!transfer->incoming)
1398 if (descriptor == (ohci_isochronous_td*)transfer->last_descriptor)
1406 // remove the transfer from the list first so we are sure
1410 (*_lastTransfer)->link = transfer->link;
1412 if (transfer == fFirstTransfer)
1413 fFirstTransfer = transfer->link;
1414 if (transfer == fLastTransfer)
1419 if (!transfer->canceled)
1420 fProcessingPipe = transfer->transfer->TransferPipe();
1422 transfer->link = NULL;
1427 transfer->last_descriptor->next_logical_descriptor = NULL;
1428 TRACE("iso.transfer %p done with status 0x%08" B_PRIx32 " len:%ld\n",
1429 transfer, callbackStatus, actualLength);
1432 if (!transfer->canceled) {
1434 if (transfer->data_descriptor && transfer->incoming) {
1436 generic_io_vec *vector = transfer->transfer->Vector();
1437 size_t vectorCount = transfer->transfer->VectorCount();
1439 transfer->transfer->PrepareKernelAccess();
1441 (ohci_isochronous_td*)transfer->data_descriptor,
1442 vector, vectorCount, transfer->transfer->IsPhysical());
1446 transfer->transfer->Finished(callbackStatus, actualLength);
1451 (ohci_isochronous_td*)transfer->first_descriptor);
1458 OHCI::_SubmitRequest(Transfer *transfer)
1460 usb_request_data *requestData = transfer->RequestData();
1495 if (transfer->VectorCount() > 0) {
1499 transfer->FragmentLength());
1507 _WriteDescriptorChain(dataDescriptor, transfer->Vector(),
1508 transfer->VectorCount(), transfer->IsPhysical());
1517 // Add to the transfer list
1519 = (ohci_endpoint_descriptor *)transfer->TransferPipe()->ControllerCookie();
1522 result = _AddPendingTransfer(transfer, endpoint, setupDescriptor,
1525 TRACE_ERROR("failed to add pending transfer\n");
1542 OHCI::_SubmitTransfer(Transfer *transfer)
1544 Pipe *pipe = transfer->TransferPipe();
1551 transfer->FragmentLength());
1567 _WriteDescriptorChain(firstDescriptor, transfer->Vector(),
1568 transfer->VectorCount(), transfer->IsPhysical());
1571 // Add to the transfer list
1580 if (it->transfer && it->transfer->TransferPipe() == pipe && it->transfer->IsFragmented()) {
1581 TRACE_ERROR("cannot submit transfer: a fragmented transfer is queued\n");
1589 result = _AddPendingTransfer(transfer, endpoint, firstDescriptor,
1592 TRACE_ERROR("failed to add pending transfer\n");
1612 OHCI::_SubmitIsochronousTransfer(Transfer *transfer)
1614 Pipe *pipe = transfer->TransferPipe();
1620 &lastDescriptor, transfer);
1636 transfer->Vector(), transfer->VectorCount(), transfer->IsPhysical());
1638 // Add to the transfer list
1643 result = _AddPendingIsochronousTransfer(transfer, endpoint,
1646 TRACE_ERROR("failed to add pending iso.transfer:"
1751 OHCI::_RemoveTransferFromEndpoint(transfer_data *transfer)
1753 // The transfer failed and the endpoint was halted. This means that the
1755 // of this transfer. As we do not know if this transfer actually caused
1758 // simply advancing the head pointer to the link of the last transfer
1762 ohci_endpoint_descriptor *endpoint = transfer->endpoint;
1763 ohci_general_td *descriptor = transfer->first_descriptor;
1768 // will either move the head to the next valid transfer that can
1770 // there are no more transfer descriptors. Setting the head will
1774 = transfer->last_descriptor->next_physical_descriptor;
2148 ohci_isochronous_td **_lastDescriptor, Transfer *transfer)
2150 Pipe *pipe = transfer->TransferPipe();
2151 usb_isochronous_data *isochronousData = transfer->IsochronousData();
2153 size_t dataLength = transfer->FragmentLength();
2171 uint16 bandwidth = transfer->Bandwidth() / packet_count;
2172 if (transfer->Bandwidth() % packet_count != 0)
2234 // the last packet may be shorter than other ones in this transfer