Lines Matching refs:req

144     SCSIRequest  *req;  member
414 static void usb_uas_queue_sense(UASRequest *req, uint8_t status) in usb_uas_queue_sense() argument
416 UASStatus *st = usb_uas_alloc_status(req->uas, UAS_UI_SENSE, req->tag); in usb_uas_queue_sense()
419 trace_usb_uas_sense(req->uas->dev.addr, req->tag, status); in usb_uas_queue_sense()
423 slen = scsi_req_get_sense(req->req, st->status.sense.sense_data, in usb_uas_queue_sense()
428 usb_uas_queue_status(req->uas, st, len); in usb_uas_queue_sense()
449 static void usb_uas_queue_read_ready(UASRequest *req) in usb_uas_queue_read_ready() argument
451 UASStatus *st = usb_uas_alloc_status(req->uas, UAS_UI_READ_READY, in usb_uas_queue_read_ready()
452 req->tag); in usb_uas_queue_read_ready()
454 trace_usb_uas_read_ready(req->uas->dev.addr, req->tag); in usb_uas_queue_read_ready()
455 usb_uas_queue_status(req->uas, st, 0); in usb_uas_queue_read_ready()
458 static void usb_uas_queue_write_ready(UASRequest *req) in usb_uas_queue_write_ready() argument
460 UASStatus *st = usb_uas_alloc_status(req->uas, UAS_UI_WRITE_READY, in usb_uas_queue_write_ready()
461 req->tag); in usb_uas_queue_write_ready()
463 trace_usb_uas_write_ready(req->uas->dev.addr, req->tag); in usb_uas_queue_write_ready()
464 usb_uas_queue_status(req->uas, st, 0); in usb_uas_queue_write_ready()
482 static void usb_uas_complete_data_packet(UASRequest *req) in usb_uas_complete_data_packet() argument
486 if (!req->data_async) { in usb_uas_complete_data_packet()
489 p = req->data; in usb_uas_complete_data_packet()
490 req->data = NULL; in usb_uas_complete_data_packet()
491 req->data_async = false; in usb_uas_complete_data_packet()
493 usb_packet_complete(&req->uas->dev, p); in usb_uas_complete_data_packet()
496 static void usb_uas_copy_data(UASRequest *req) in usb_uas_copy_data() argument
500 length = MIN(req->buf_size - req->buf_off, in usb_uas_copy_data()
501 req->data->iov.size - req->data->actual_length); in usb_uas_copy_data()
502 trace_usb_uas_xfer_data(req->uas->dev.addr, req->tag, length, in usb_uas_copy_data()
503 req->data->actual_length, req->data->iov.size, in usb_uas_copy_data()
504 req->buf_off, req->buf_size); in usb_uas_copy_data()
505 usb_packet_copy(req->data, scsi_req_get_buf(req->req) + req->buf_off, in usb_uas_copy_data()
507 req->buf_off += length; in usb_uas_copy_data()
508 req->data_off += length; in usb_uas_copy_data()
510 if (req->data->actual_length == req->data->iov.size) { in usb_uas_copy_data()
511 usb_uas_complete_data_packet(req); in usb_uas_copy_data()
513 if (req->buf_size && req->buf_off == req->buf_size) { in usb_uas_copy_data()
514 req->buf_off = 0; in usb_uas_copy_data()
515 req->buf_size = 0; in usb_uas_copy_data()
516 scsi_req_continue(req->req); in usb_uas_copy_data()
522 UASRequest *req; in usb_uas_start_next_transfer() local
528 QTAILQ_FOREACH(req, &uas->requests, next) { in usb_uas_start_next_transfer()
529 if (req->active || req->complete) { in usb_uas_start_next_transfer()
532 if (req->req->cmd.mode == SCSI_XFER_FROM_DEV && uas->datain2 == NULL) { in usb_uas_start_next_transfer()
533 uas->datain2 = req; in usb_uas_start_next_transfer()
534 usb_uas_queue_read_ready(req); in usb_uas_start_next_transfer()
535 req->active = true; in usb_uas_start_next_transfer()
538 if (req->req->cmd.mode == SCSI_XFER_TO_DEV && uas->dataout2 == NULL) { in usb_uas_start_next_transfer()
539 uas->dataout2 = req; in usb_uas_start_next_transfer()
540 usb_uas_queue_write_ready(req); in usb_uas_start_next_transfer()
541 req->active = true; in usb_uas_start_next_transfer()
549 UASRequest *req; in usb_uas_alloc_request() local
551 req = g_new0(UASRequest, 1); in usb_uas_alloc_request()
552 req->uas = uas; in usb_uas_alloc_request()
553 req->tag = be16_to_cpu(iu->hdr.tag); in usb_uas_alloc_request()
554 req->lun = be64_to_cpu(iu->command.lun); in usb_uas_alloc_request()
555 req->dev = usb_uas_get_dev(req->uas, req->lun); in usb_uas_alloc_request()
556 return req; in usb_uas_alloc_request()
561 UASRequest *req = priv; in usb_uas_scsi_free_request() local
562 UASDevice *uas = req->uas; in usb_uas_scsi_free_request()
564 if (req == uas->datain2) { in usb_uas_scsi_free_request()
567 if (req == uas->dataout2) { in usb_uas_scsi_free_request()
570 QTAILQ_REMOVE(&uas->requests, req, next); in usb_uas_scsi_free_request()
571 g_free(req); in usb_uas_scsi_free_request()
577 UASRequest *req; in usb_uas_find_request() local
579 QTAILQ_FOREACH(req, &uas->requests, next) { in usb_uas_find_request()
580 if (req->tag == tag) { in usb_uas_find_request()
581 return req; in usb_uas_find_request()
589 UASRequest *req = r->hba_private; in usb_uas_scsi_transfer_data() local
591 trace_usb_uas_scsi_data(req->uas->dev.addr, req->tag, len); in usb_uas_scsi_transfer_data()
592 req->buf_off = 0; in usb_uas_scsi_transfer_data()
593 req->buf_size = len; in usb_uas_scsi_transfer_data()
594 if (req->data) { in usb_uas_scsi_transfer_data()
595 usb_uas_copy_data(req); in usb_uas_scsi_transfer_data()
597 usb_uas_start_next_transfer(req->uas); in usb_uas_scsi_transfer_data()
603 UASRequest *req = r->hba_private; in usb_uas_scsi_command_complete() local
605 trace_usb_uas_scsi_complete(req->uas->dev.addr, req->tag, r->status, resid); in usb_uas_scsi_command_complete()
606 req->complete = true; in usb_uas_scsi_command_complete()
607 if (req->data) { in usb_uas_scsi_command_complete()
608 usb_uas_complete_data_packet(req); in usb_uas_scsi_command_complete()
610 usb_uas_queue_sense(req, r->status); in usb_uas_scsi_command_complete()
611 scsi_req_unref(req->req); in usb_uas_scsi_command_complete()
616 UASRequest *req = r->hba_private; in usb_uas_scsi_request_cancelled() local
619 scsi_req_unref(req->req); in usb_uas_scsi_request_cancelled()
638 UASRequest *req, *nreq; in usb_uas_handle_reset() local
642 QTAILQ_FOREACH_SAFE(req, &uas->requests, next, nreq) { in usb_uas_handle_reset()
643 scsi_req_cancel(req->req); in usb_uas_handle_reset()
668 UASRequest *req, *nreq; in usb_uas_cancel_io() local
688 QTAILQ_FOREACH_SAFE(req, &uas->requests, next, nreq) { in usb_uas_cancel_io()
689 if (req->data == p) { in usb_uas_cancel_io()
690 req->data = NULL; in usb_uas_cancel_io()
699 UASRequest *req; in usb_uas_command() local
712 req = usb_uas_find_request(uas, tag); in usb_uas_command()
713 if (req) { in usb_uas_command()
716 req = usb_uas_alloc_request(uas, iu); in usb_uas_command()
717 if (req->dev == NULL) { in usb_uas_command()
721 trace_usb_uas_command(uas->dev.addr, req->tag, in usb_uas_command()
722 usb_uas_get_lun(req->lun), in usb_uas_command()
723 req->lun >> 32, req->lun & 0xffffffff); in usb_uas_command()
724 QTAILQ_INSERT_TAIL(&uas->requests, req, next); in usb_uas_command()
725 if (uas_using_streams(uas) && uas->data3[req->tag] != NULL) { in usb_uas_command()
726 req->data = uas->data3[req->tag]; in usb_uas_command()
727 req->data_async = true; in usb_uas_command()
728 uas->data3[req->tag] = NULL; in usb_uas_command()
731 req->req = scsi_req_new(req->dev, req->tag, in usb_uas_command()
732 usb_uas_get_lun(req->lun), in usb_uas_command()
733 iu->command.cdb, cdb_len, req); in usb_uas_command()
735 scsi_req_print(req->req); in usb_uas_command()
737 len = scsi_req_enqueue(req->req); in usb_uas_command()
739 req->data_size = len; in usb_uas_command()
740 scsi_req_continue(req->req); in usb_uas_command()
758 g_free(req); in usb_uas_command()
767 UASRequest *req; in usb_uas_task() local
773 req = usb_uas_find_request(uas, be16_to_cpu(iu->hdr.tag)); in usb_uas_task()
774 if (req) { in usb_uas_task()
785 req = usb_uas_find_request(uas, task_tag); in usb_uas_task()
786 if (req && req->dev == dev) { in usb_uas_task()
787 scsi_req_cancel(req->req); in usb_uas_task()
810 usb_uas_queue_response(uas, req->tag, UAS_RC_OVERLAPPED_TAG); in usb_uas_task()
822 UASRequest *req; in usb_uas_handle_data() local
878 req = usb_uas_find_request(uas, p->stream); in usb_uas_handle_data()
880 req = (p->ep->nr == UAS_PIPE_ID_DATA_IN) in usb_uas_handle_data()
883 if (req == NULL) { in usb_uas_handle_data()
895 scsi_req_ref(req->req); in usb_uas_handle_data()
896 req->data = p; in usb_uas_handle_data()
897 usb_uas_copy_data(req); in usb_uas_handle_data()
898 if (p->actual_length == p->iov.size || req->complete) { in usb_uas_handle_data()
899 req->data = NULL; in usb_uas_handle_data()
901 req->data_async = true; in usb_uas_handle_data()
904 scsi_req_unref(req->req); in usb_uas_handle_data()