Lines Matching defs:io

156 static void	cfiscsi_datamove(union ctl_io *io);
157 static void cfiscsi_datamove_in(union ctl_io *io);
158 static void cfiscsi_datamove_out(union ctl_io *io);
159 static void cfiscsi_done(union ctl_io *io);
491 union ctl_io *io;
506 io = ctl_alloc_io(cs->cs_target->ct_port.ctl_pool_ref);
507 ctl_zero_io(io);
508 io->io_hdr.ctl_private[CTL_PRIV_FRONTEND].ptr = request;
509 io->io_hdr.io_type = CTL_IO_SCSI;
510 io->io_hdr.nexus.initid = cs->cs_ctl_initid;
511 io->io_hdr.nexus.targ_port = cs->cs_target->ct_port.targ_port;
512 io->io_hdr.nexus.targ_lun = ctl_decode_lun(be64toh(bhssc->bhssc_lun));
513 io->scsiio.tag_num = bhssc->bhssc_initiator_task_tag;
516 io->scsiio.tag_type = CTL_TAG_UNTAGGED;
519 io->scsiio.tag_type = CTL_TAG_SIMPLE;
522 io->scsiio.tag_type = CTL_TAG_ORDERED;
525 io->scsiio.tag_type = CTL_TAG_HEAD_OF_QUEUE;
528 io->scsiio.tag_type = CTL_TAG_ACA;
531 io->scsiio.tag_type = CTL_TAG_UNTAGGED;
536 io->scsiio.cdb_len = sizeof(bhssc->bhssc_cdb); /* Which is 16. */
537 memcpy(io->scsiio.cdb, bhssc->bhssc_cdb, sizeof(bhssc->bhssc_cdb));
539 error = ctl_queue(io);
543 ctl_free_io(io);
557 union ctl_io *io;
562 io = ctl_alloc_io(cs->cs_target->ct_port.ctl_pool_ref);
563 ctl_zero_io(io);
564 io->io_hdr.ctl_private[CTL_PRIV_FRONTEND].ptr = request;
565 io->io_hdr.io_type = CTL_IO_TASK;
566 io->io_hdr.nexus.initid = cs->cs_ctl_initid;
567 io->io_hdr.nexus.targ_port = cs->cs_target->ct_port.targ_port;
568 io->io_hdr.nexus.targ_lun = ctl_decode_lun(be64toh(bhstmr->bhstmr_lun));
569 io->taskio.tag_type = CTL_TAG_SIMPLE; /* XXX */
576 io->taskio.task_action = CTL_TASK_ABORT_TASK;
577 io->taskio.tag_num = bhstmr->bhstmr_referenced_task_tag;
583 io->taskio.task_action = CTL_TASK_ABORT_TASK_SET;
589 io->taskio.task_action = CTL_TASK_CLEAR_TASK_SET;
595 io->taskio.task_action = CTL_TASK_LUN_RESET;
601 io->taskio.task_action = CTL_TASK_TARGET_RESET;
607 io->taskio.task_action = CTL_TASK_TARGET_RESET;
613 io->taskio.task_action = CTL_TASK_QUERY_TASK;
614 io->taskio.tag_num = bhstmr->bhstmr_referenced_task_tag;
620 io->taskio.task_action = CTL_TASK_QUERY_TASK_SET;
626 io->taskio.task_action = CTL_TASK_I_T_NEXUS_RESET;
632 io->taskio.task_action = CTL_TASK_QUERY_ASYNC_EVENT;
637 ctl_free_io(io);
661 error = ctl_queue(io);
665 ctl_free_io(io);
680 union ctl_io *io;
695 io = cdw->cdw_ctl_io;
696 KASSERT((io->io_hdr.flags & CTL_FLAG_DATA_MASK) != CTL_FLAG_DATA_IN,
701 request->ip_data_len, io->scsiio.kern_total_len);
704 if (io->scsiio.kern_sg_entries > 0) {
705 ctl_sglist = (struct ctl_sg_entry *)io->scsiio.kern_data_ptr;
706 ctl_sg_count = io->scsiio.kern_sg_entries;
709 ctl_sglist->addr = io->scsiio.kern_data_ptr;
710 ctl_sglist->len = io->scsiio.kern_data_len;
726 io->scsiio.kern_rel_offset + io->scsiio.ext_data_filled ||
728 io->scsiio.kern_rel_offset + io->scsiio.ext_data_filled) {
731 (size_t)io->scsiio.kern_rel_offset +
732 (size_t)io->scsiio.ext_data_filled);
733 ctl_set_data_phase_error(&io->scsiio);
743 off = io->scsiio.kern_rel_offset + io->scsiio.ext_data_filled -
768 io->scsiio.ext_data_filled += copy_len;
769 io->scsiio.kern_data_resid -= copy_len;
808 ctl_set_data_phase_error(&io->scsiio);
813 if (io->scsiio.ext_data_filled == cdw->cdw_r2t_end &&
818 ctl_set_data_phase_error(&io->scsiio);
823 if (io->scsiio.ext_data_filled != cdw->cdw_r2t_end &&
830 (size_t)io->scsiio.ext_data_filled,
832 ctl_set_data_phase_error(&io->scsiio);
844 if (io->scsiio.ext_data_filled == cdw->cdw_r2t_end) {
862 union ctl_io *io;
901 io = cdw->cdw_ctl_io;
902 KASSERT((io->io_hdr.flags & CTL_FLAG_DATA_MASK) != CTL_FLAG_DATA_IN,
910 done = (io->scsiio.ext_data_filled != cdw->cdw_r2t_end ||
911 io->scsiio.ext_data_filled == io->scsiio.kern_data_len);
913 io->io_hdr.flags &= ~CTL_FLAG_DMA_INPROG;
915 io->scsiio.be_move_done(io);
917 cfiscsi_datamove_out(io);
1055 union ctl_io *io;
1060 io = ctl_alloc_io(cs->cs_target->ct_port.ctl_pool_ref);
1061 ctl_zero_io(io);
1062 io->io_hdr.ctl_private[CTL_PRIV_FRONTEND].ptr = cs;
1063 io->io_hdr.io_type = CTL_IO_TASK;
1064 io->io_hdr.nexus.initid = cs->cs_ctl_initid;
1065 io->io_hdr.nexus.targ_port = cs->cs_target->ct_port.targ_port;
1066 io->io_hdr.nexus.targ_lun = 0;
1067 io->taskio.tag_type = CTL_TAG_SIMPLE; /* XXX */
1068 io->taskio.task_action = CTL_TASK_I_T_NEXUS_RESET;
1071 error = ctl_queue(io);
1075 ctl_free_io(io);
2313 cfiscsi_datamove_in(union ctl_io *io)
2324 request = io->io_hdr.ctl_private[CTL_PRIV_FRONTEND].ptr;
2332 if (io->scsiio.kern_sg_entries > 0) {
2333 ctl_sglist = (struct ctl_sg_entry *)io->scsiio.kern_data_ptr;
2334 ctl_sg_count = io->scsiio.kern_sg_entries;
2337 ctl_sglist->addr = io->scsiio.kern_data_ptr;
2338 ctl_sglist->len = io->scsiio.kern_data_len;
2347 PDU_TOTAL_TRANSFER_LEN(request) = io->scsiio.kern_total_len;
2354 buffer_offset = io->scsiio.kern_rel_offset;
2363 if (expected_len != io->scsiio.kern_total_len) {
2366 (size_t)io->scsiio.kern_total_len);
2375 io->scsiio.be_move_done(io);
2390 ctl_set_busy(&io->scsiio);
2391 io->scsiio.be_move_done(io);
2448 ctl_set_busy(&io->scsiio);
2449 io->scsiio.be_move_done(io);
2455 io->scsiio.kern_data_resid -= len;
2491 if (buffer_offset == io->scsiio.kern_total_len ||
2503 if (buffer_offset == io->scsiio.kern_total_len ||
2506 if (io->io_hdr.status == CTL_SUCCESS) {
2521 bhsdi->bhsdi_status = io->scsiio.scsi_status;
2522 io->io_hdr.flags |= CTL_FLAG_STATUS_SENT;
2529 io->scsiio.be_move_done(io);
2533 cfiscsi_datamove_out(union ctl_io *io)
2545 request = io->io_hdr.ctl_private[CTL_PRIV_FRONTEND].ptr;
2557 PDU_TOTAL_TRANSFER_LEN(request) = io->scsiio.kern_total_len;
2563 if (io->scsiio.kern_rel_offset >= expected_len) {
2564 io->scsiio.be_move_done(io);
2567 datamove_len = MIN(io->scsiio.kern_data_len,
2568 expected_len - io->scsiio.kern_rel_offset);
2582 ctl_set_busy(&io->scsiio);
2583 io->scsiio.be_move_done(io);
2587 cdw->cdw_ctl_io = io;
2594 if (io->scsiio.kern_sg_entries > 0) {
2595 ctl_sglist = (struct ctl_sg_entry *)io->scsiio.kern_data_ptr;
2598 ctl_sglist->addr = io->scsiio.kern_data_ptr;
2604 r2t_off = io->scsiio.ext_data_filled;
2619 io->scsiio.kern_rel_offset + io->scsiio.ext_data_filled <
2624 io->scsiio.be_move_done(io);
2629 r2t_off = io->scsiio.kern_rel_offset + io->scsiio.ext_data_filled;
2630 r2t_len = MIN(datamove_len - io->scsiio.ext_data_filled,
2632 cdw->cdw_r2t_end = io->scsiio.ext_data_filled + r2t_len;
2646 ctl_set_busy(&io->scsiio);
2647 io->scsiio.be_move_done(io);
2651 io->io_hdr.flags |= CTL_FLAG_DMA_INPROG;
2685 cfiscsi_datamove(union ctl_io *io)
2688 if ((io->io_hdr.flags & CTL_FLAG_DATA_MASK) == CTL_FLAG_DATA_IN)
2689 cfiscsi_datamove_in(io);
2692 io->scsiio.ext_data_filled = 0;
2693 cfiscsi_datamove_out(io);
2698 cfiscsi_scsi_command_done(union ctl_io *io)
2709 request = io->io_hdr.ctl_private[CTL_PRIV_FRONTEND].ptr;
2731 if (((io->io_hdr.flags & CTL_FLAG_ABORT) &&
2732 (io->io_hdr.flags & CTL_FLAG_ABORT_STATUS) == 0) ||
2733 (io->io_hdr.flags & CTL_FLAG_STATUS_SENT)) {
2734 ctl_free_io(io);
2765 bhssr->bhssr_status = io->scsiio.scsi_status;
2769 if (io->scsiio.sense_len > 0) {
2772 io->scsiio.sense_len);
2774 sense_length = htons(io->scsiio.sense_len);
2778 &io->scsiio.sense_data, io->scsiio.sense_len, M_WAITOK);
2781 ctl_free_io(io);
2787 cfiscsi_task_management_done(union ctl_io *io)
2797 request = io->io_hdr.ctl_private[CTL_PRIV_FRONTEND].ptr;
2828 io->io_hdr.flags &= ~CTL_FLAG_DMA_INPROG;
2837 io->io_hdr.status == CTL_SUCCESS)
2845 switch (io->taskio.task_status) {
2861 io->taskio.task_resp, sizeof(io->taskio.task_resp));
2864 ctl_free_io(io);
2880 cfiscsi_done(union ctl_io *io)
2885 KASSERT(((io->io_hdr.status & CTL_STATUS_MASK) != CTL_STATUS_NONE),
2886 ("invalid CTL status %#x", io->io_hdr.status));
2888 if (io->io_hdr.io_type == CTL_IO_TASK &&
2889 io->taskio.task_action == CTL_TASK_I_T_NEXUS_RESET) {
2893 cs = io->io_hdr.ctl_private[CTL_PRIV_FRONTEND].ptr;
2897 ctl_free_io(io);
2901 request = io->io_hdr.ctl_private[CTL_PRIV_FRONTEND].ptr;
2907 cfiscsi_scsi_command_done(io);
2910 cfiscsi_task_management_done(io);