Lines Matching refs:ctsio
398 static void ctl_serialize_other_sc_cmd(struct ctl_scsiio *ctsio);
412 struct ctl_scsiio *ctsio,
418 static int ctl_inquiry_evpd_supported(struct ctl_scsiio *ctsio, int alloc_len);
419 static int ctl_inquiry_evpd_serial(struct ctl_scsiio *ctsio, int alloc_len);
420 static int ctl_inquiry_evpd_devid(struct ctl_scsiio *ctsio, int alloc_len);
421 static int ctl_inquiry_evpd_eid(struct ctl_scsiio *ctsio, int alloc_len);
422 static int ctl_inquiry_evpd_mpp(struct ctl_scsiio *ctsio, int alloc_len);
423 static int ctl_inquiry_evpd_scsi_ports(struct ctl_scsiio *ctsio,
425 static int ctl_inquiry_evpd_sfs(struct ctl_scsiio *ctsio, int alloc_len);
426 static int ctl_inquiry_evpd_block_limits(struct ctl_scsiio *ctsio,
428 static int ctl_inquiry_evpd_bdc(struct ctl_scsiio *ctsio, int alloc_len);
429 static int ctl_inquiry_evpd_lbp(struct ctl_scsiio *ctsio, int alloc_len);
430 static int ctl_inquiry_evpd(struct ctl_scsiio *ctsio);
431 static int ctl_inquiry_std(struct ctl_scsiio *ctsio);
447 struct ctl_scsiio *ctsio);
449 static void ctl_scsiio_precheck(struct ctl_scsiio *ctsio);
450 static int ctl_scsiio(struct ctl_scsiio *ctsio);
490 ctl_get_cmd_entry(struct ctl_scsiio *ctsio, int *sa);
492 ctl_validate_command(struct ctl_scsiio *ctsio);
762 struct ctl_scsiio *ctsio; in ctl_isc_handler_finish_xfer() local
770 ctsio = &msg_info->hdr.original_sc->scsiio; in ctl_isc_handler_finish_xfer()
771 ctsio->io_hdr.flags &= ~CTL_FLAG_SENT_2OTHER_SC; in ctl_isc_handler_finish_xfer()
772 ctsio->io_hdr.flags |= CTL_FLAG_IO_ACTIVE; in ctl_isc_handler_finish_xfer()
773 ctsio->io_hdr.msg_type = CTL_MSG_FINISH_IO; in ctl_isc_handler_finish_xfer()
774 ctsio->io_hdr.status = msg_info->hdr.status; in ctl_isc_handler_finish_xfer()
775 ctsio->scsi_status = msg_info->scsi.scsi_status; in ctl_isc_handler_finish_xfer()
776 ctsio->sense_len = msg_info->scsi.sense_len; in ctl_isc_handler_finish_xfer()
777 memcpy(&ctsio->sense_data, &msg_info->scsi.sense_data, in ctl_isc_handler_finish_xfer()
779 ctl_enqueue_isc((union ctl_io *)ctsio); in ctl_isc_handler_finish_xfer()
786 struct ctl_scsiio *ctsio; in ctl_isc_handler_finish_ser_only() local
794 ctsio = &msg_info->hdr.serializing_sc->scsiio; in ctl_isc_handler_finish_ser_only()
795 ctsio->io_hdr.msg_type = CTL_MSG_FINISH_IO; in ctl_isc_handler_finish_ser_only()
796 ctl_enqueue_isc((union ctl_io *)ctsio); in ctl_isc_handler_finish_ser_only()
2317 ctl_serialize_other_sc_cmd(struct ctl_scsiio *ctsio) in ctl_serialize_other_sc_cmd() argument
2319 struct ctl_softc *softc = CTL_SOFTC(ctsio); in ctl_serialize_other_sc_cmd()
2320 struct ctl_port *port = CTL_PORT(ctsio); in ctl_serialize_other_sc_cmd()
2327 targ_lun = ctsio->io_hdr.nexus.targ_mapped_lun; in ctl_serialize_other_sc_cmd()
2331 ctl_set_internal_failure(ctsio, /*sks_valid*/ 0, in ctl_serialize_other_sc_cmd()
2348 ctl_set_busy(ctsio); in ctl_serialize_other_sc_cmd()
2360 ctl_set_busy(ctsio); in ctl_serialize_other_sc_cmd()
2364 entry = ctl_get_cmd_entry(ctsio, NULL); in ctl_serialize_other_sc_cmd()
2365 ctsio->seridx = entry->seridx; in ctl_serialize_other_sc_cmd()
2366 if (ctl_scsiio_lun_check(lun, entry, ctsio) != 0) { in ctl_serialize_other_sc_cmd()
2371 CTL_LUN(ctsio) = lun; in ctl_serialize_other_sc_cmd()
2372 CTL_BACKEND_LUN(ctsio) = lun->be_lun; in ctl_serialize_other_sc_cmd()
2382 LIST_INSERT_HEAD(&lun->ooa_queue, &ctsio->io_hdr, ooa_links); in ctl_serialize_other_sc_cmd()
2384 bio = (union ctl_io *)LIST_NEXT(&ctsio->io_hdr, ooa_links); in ctl_serialize_other_sc_cmd()
2385 switch (ctl_check_ooa(lun, (union ctl_io *)ctsio, &bio)) { in ctl_serialize_other_sc_cmd()
2389 ctsio->io_hdr.flags |= CTL_FLAG_IS_WAS_ON_RTR; in ctl_serialize_other_sc_cmd()
2390 ctl_enqueue_rtr((union ctl_io *)ctsio); in ctl_serialize_other_sc_cmd()
2393 ctsio->io_hdr.flags &= ~CTL_FLAG_IO_ACTIVE; in ctl_serialize_other_sc_cmd()
2397 msg_info.hdr.original_sc = ctsio->io_hdr.remote_io; in ctl_serialize_other_sc_cmd()
2398 msg_info.hdr.serializing_sc = (union ctl_io *)ctsio; in ctl_serialize_other_sc_cmd()
2405 ctsio->io_hdr.blocker = bio; in ctl_serialize_other_sc_cmd()
2406 TAILQ_INSERT_TAIL(&bio->io_hdr.blocked_queue, &ctsio->io_hdr, in ctl_serialize_other_sc_cmd()
2411 LIST_REMOVE(&ctsio->io_hdr, ooa_links); in ctl_serialize_other_sc_cmd()
2413 ctl_set_overlapped_cmd(ctsio); in ctl_serialize_other_sc_cmd()
2416 LIST_REMOVE(&ctsio->io_hdr, ooa_links); in ctl_serialize_other_sc_cmd()
2418 ctl_set_overlapped_tag(ctsio, ctsio->tag_num & 0xff); in ctl_serialize_other_sc_cmd()
2420 ctl_copy_sense_data_back((union ctl_io *)ctsio, &msg_info); in ctl_serialize_other_sc_cmd()
2421 msg_info.hdr.original_sc = ctsio->io_hdr.remote_io; in ctl_serialize_other_sc_cmd()
2426 ctl_free_io((union ctl_io *)ctsio); in ctl_serialize_other_sc_cmd()
5215 ctl_scsi_release(struct ctl_scsiio *ctsio) in ctl_scsi_release() argument
5217 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_scsi_release()
5222 residx = ctl_get_initindex(&ctsio->io_hdr.nexus); in ctl_scsi_release()
5246 ctl_set_success(ctsio); in ctl_scsi_release()
5247 ctl_done((union ctl_io *)ctsio); in ctl_scsi_release()
5252 ctl_scsi_reserve(struct ctl_scsiio *ctsio) in ctl_scsi_reserve() argument
5254 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_scsi_reserve()
5259 residx = ctl_get_initindex(&ctsio->io_hdr.nexus); in ctl_scsi_reserve()
5271 ctl_set_reservation_conflict(ctsio); in ctl_scsi_reserve()
5277 ctl_set_success(ctsio); in ctl_scsi_reserve()
5283 ctl_set_success(ctsio); in ctl_scsi_reserve()
5287 ctl_done((union ctl_io *)ctsio); in ctl_scsi_reserve()
5292 ctl_start_stop(struct ctl_scsiio *ctsio) in ctl_start_stop() argument
5294 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_start_stop()
5300 cdb = (struct scsi_start_stop_unit *)ctsio->cdb; in ctl_start_stop()
5307 residx = ctl_get_initindex(&ctsio->io_hdr.nexus); in ctl_start_stop()
5310 ctl_set_reservation_conflict(ctsio); in ctl_start_stop()
5311 ctl_done((union ctl_io *)ctsio); in ctl_start_stop()
5318 ctl_set_invalid_field(ctsio, in ctl_start_stop()
5324 ctl_done((union ctl_io *)ctsio); in ctl_start_stop()
5331 ctl_set_sense(ctsio, /*current_error*/ 1, in ctl_start_stop()
5335 ctl_done((union ctl_io *)ctsio); in ctl_start_stop()
5340 retval = lun->backend->config_write((union ctl_io *)ctsio); in ctl_start_stop()
5345 ctl_prevent_allow(struct ctl_scsiio *ctsio) in ctl_prevent_allow() argument
5347 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_prevent_allow()
5354 cdb = (struct scsi_prevent *)ctsio->cdb; in ctl_prevent_allow()
5357 ctl_set_invalid_opcode(ctsio); in ctl_prevent_allow()
5358 ctl_done((union ctl_io *)ctsio); in ctl_prevent_allow()
5362 initidx = ctl_get_initindex(&ctsio->io_hdr.nexus); in ctl_prevent_allow()
5374 retval = lun->backend->config_write((union ctl_io *)ctsio); in ctl_prevent_allow()
5385 ctl_sync_cache(struct ctl_scsiio *ctsio) in ctl_sync_cache() argument
5387 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_sync_cache()
5398 switch (ctsio->cdb[0]) { in ctl_sync_cache()
5401 cdb = (struct scsi_sync_cache *)ctsio->cdb; in ctl_sync_cache()
5410 cdb = (struct scsi_sync_cache_16 *)ctsio->cdb; in ctl_sync_cache()
5418 ctl_set_invalid_opcode(ctsio); in ctl_sync_cache()
5419 ctl_done((union ctl_io *)ctsio); in ctl_sync_cache()
5431 ctl_set_lba_out_of_range(ctsio, in ctl_sync_cache()
5433 ctl_done((union ctl_io *)ctsio); in ctl_sync_cache()
5437 lbalen = (struct ctl_lba_len_flags *)&ctsio->io_hdr.ctl_private[CTL_PRIV_LBA_LEN]; in ctl_sync_cache()
5441 retval = lun->backend->config_write((union ctl_io *)ctsio); in ctl_sync_cache()
5448 ctl_format(struct ctl_scsiio *ctsio) in ctl_format() argument
5455 cdb = (struct scsi_format *)ctsio->cdb; in ctl_format()
5465 if (((ctsio->io_hdr.flags & CTL_FLAG_ALLOCATED) == 0) in ctl_format()
5467 ctsio->kern_data_ptr = malloc(length, M_CTL, M_WAITOK); in ctl_format()
5468 ctsio->kern_data_len = length; in ctl_format()
5469 ctsio->kern_total_len = length; in ctl_format()
5470 ctsio->kern_rel_offset = 0; in ctl_format()
5471 ctsio->kern_sg_entries = 0; in ctl_format()
5472 ctsio->io_hdr.flags |= CTL_FLAG_ALLOCATED; in ctl_format()
5473 ctsio->be_move_done = ctl_config_move_done; in ctl_format()
5474 ctl_datamove((union ctl_io *)ctsio); in ctl_format()
5486 ctsio->kern_data_ptr; in ctl_format()
5490 ctl_set_invalid_field(ctsio, in ctl_format()
5502 ctsio->kern_data_ptr; in ctl_format()
5506 ctl_set_invalid_field(ctsio, in ctl_format()
5517 ctl_set_success(ctsio); in ctl_format()
5520 if (ctsio->io_hdr.flags & CTL_FLAG_ALLOCATED) { in ctl_format()
5521 free(ctsio->kern_data_ptr, M_CTL); in ctl_format()
5522 ctsio->io_hdr.flags &= ~CTL_FLAG_ALLOCATED; in ctl_format()
5525 ctl_done((union ctl_io *)ctsio); in ctl_format()
5530 ctl_read_buffer(struct ctl_scsiio *ctsio) in ctl_read_buffer() argument
5532 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_read_buffer()
5541 switch (ctsio->cdb[0]) { in ctl_read_buffer()
5545 cdb = (struct scsi_read_buffer *)ctsio->cdb; in ctl_read_buffer()
5554 cdb = (struct scsi_read_buffer_16 *)ctsio->cdb; in ctl_read_buffer()
5561 ctl_set_invalid_opcode(ctsio); in ctl_read_buffer()
5562 ctl_done((union ctl_io *)ctsio); in ctl_read_buffer()
5568 ctl_set_invalid_field(ctsio, in ctl_read_buffer()
5574 ctl_done((union ctl_io *)ctsio); in ctl_read_buffer()
5581 ctsio->kern_data_ptr = descr; in ctl_read_buffer()
5584 ctsio->kern_data_ptr = echo_descr; in ctl_read_buffer()
5591 ctsio->kern_data_ptr = lun->write_buffer + buffer_offset; in ctl_read_buffer()
5593 ctsio->kern_data_len = len; in ctl_read_buffer()
5594 ctsio->kern_total_len = len; in ctl_read_buffer()
5595 ctsio->kern_rel_offset = 0; in ctl_read_buffer()
5596 ctsio->kern_sg_entries = 0; in ctl_read_buffer()
5597 ctl_set_success(ctsio); in ctl_read_buffer()
5598 ctsio->be_move_done = ctl_config_move_done; in ctl_read_buffer()
5599 ctl_datamove((union ctl_io *)ctsio); in ctl_read_buffer()
5604 ctl_write_buffer(struct ctl_scsiio *ctsio) in ctl_write_buffer() argument
5606 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_write_buffer()
5612 cdb = (struct scsi_write_buffer *)ctsio->cdb; in ctl_write_buffer()
5618 ctl_set_invalid_field(ctsio, in ctl_write_buffer()
5624 ctl_done((union ctl_io *)ctsio); in ctl_write_buffer()
5640 if (ctsio->kern_data_ptr == NULL) { in ctl_write_buffer()
5641 ctsio->kern_data_ptr = lun->write_buffer + buffer_offset; in ctl_write_buffer()
5642 ctsio->kern_data_len = len; in ctl_write_buffer()
5643 ctsio->kern_total_len = len; in ctl_write_buffer()
5644 ctsio->kern_rel_offset = 0; in ctl_write_buffer()
5645 ctsio->kern_sg_entries = 0; in ctl_write_buffer()
5646 ctsio->be_move_done = ctl_config_move_done; in ctl_write_buffer()
5647 ctl_datamove((union ctl_io *)ctsio); in ctl_write_buffer()
5652 ctl_set_success(ctsio); in ctl_write_buffer()
5653 ctl_done((union ctl_io *)ctsio); in ctl_write_buffer()
5661 struct ctl_scsiio *ctsio; in ctl_write_same_cont() local
5667 ctsio = &io->scsiio; in ctl_write_same_cont()
5668 ctsio->io_hdr.status = CTL_STATUS_NONE; in ctl_write_same_cont()
5670 &ctsio->io_hdr.ctl_private[CTL_PRIV_LBA_LEN]; in ctl_write_same_cont()
5673 ctsio->io_hdr.flags &= ~CTL_FLAG_IO_CONT; in ctl_write_same_cont()
5678 retval = lun->backend->config_write((union ctl_io *)ctsio); in ctl_write_same_cont()
5683 ctl_write_same(struct ctl_scsiio *ctsio) in ctl_write_same() argument
5685 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_write_same()
5695 switch (ctsio->cdb[0]) { in ctl_write_same()
5699 cdb = (struct scsi_write_same_10 *)ctsio->cdb; in ctl_write_same()
5709 cdb = (struct scsi_write_same_16 *)ctsio->cdb; in ctl_write_same()
5721 ctl_set_invalid_opcode(ctsio); in ctl_write_same()
5722 ctl_done((union ctl_io *)ctsio); in ctl_write_same()
5730 ctl_set_invalid_field(ctsio, /*sks_valid*/ 1, in ctl_write_same()
5732 ctl_done((union ctl_io *)ctsio); in ctl_write_same()
5744 ctl_set_lba_out_of_range(ctsio, in ctl_write_same()
5746 ctl_done((union ctl_io *)ctsio); in ctl_write_same()
5758 ctl_set_invalid_field(ctsio, in ctl_write_same()
5760 /*field*/ ctsio->cdb[0] == WRITE_SAME_10 ? 7 : 10, in ctl_write_same()
5762 ctl_done((union ctl_io *)ctsio); in ctl_write_same()
5766 ctsio->io_hdr.flags |= CTL_FLAG_IO_CONT; in ctl_write_same()
5767 ctsio->io_cont = ctl_write_same_cont; in ctl_write_same()
5780 (ctsio->io_hdr.flags & CTL_FLAG_ALLOCATED) == 0) { in ctl_write_same()
5781 ctsio->kern_data_ptr = malloc(len, M_CTL, M_WAITOK); in ctl_write_same()
5782 ctsio->kern_data_len = len; in ctl_write_same()
5783 ctsio->kern_total_len = len; in ctl_write_same()
5784 ctsio->kern_rel_offset = 0; in ctl_write_same()
5785 ctsio->kern_sg_entries = 0; in ctl_write_same()
5786 ctsio->io_hdr.flags |= CTL_FLAG_ALLOCATED; in ctl_write_same()
5787 ctsio->be_move_done = ctl_config_move_done; in ctl_write_same()
5788 ctl_datamove((union ctl_io *)ctsio); in ctl_write_same()
5793 lbalen = (struct ctl_lba_len_flags *)&ctsio->io_hdr.ctl_private[CTL_PRIV_LBA_LEN]; in ctl_write_same()
5797 retval = lun->backend->config_write((union ctl_io *)ctsio); in ctl_write_same()
5803 ctl_unmap(struct ctl_scsiio *ctsio) in ctl_unmap() argument
5805 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_unmap()
5817 cdb = (struct scsi_unmap *)ctsio->cdb; in ctl_unmap()
5825 if ((ctsio->io_hdr.flags & CTL_FLAG_ALLOCATED) == 0) { in ctl_unmap()
5826 ctsio->kern_data_ptr = malloc(len, M_CTL, M_WAITOK); in ctl_unmap()
5827 ctsio->kern_data_len = len; in ctl_unmap()
5828 ctsio->kern_total_len = len; in ctl_unmap()
5829 ctsio->kern_rel_offset = 0; in ctl_unmap()
5830 ctsio->kern_sg_entries = 0; in ctl_unmap()
5831 ctsio->io_hdr.flags |= CTL_FLAG_ALLOCATED; in ctl_unmap()
5832 ctsio->be_move_done = ctl_config_move_done; in ctl_unmap()
5833 ctl_datamove((union ctl_io *)ctsio); in ctl_unmap()
5838 len = ctsio->kern_total_len - ctsio->kern_data_resid; in ctl_unmap()
5839 hdr = (struct scsi_unmap_header *)ctsio->kern_data_ptr; in ctl_unmap()
5844 ctl_set_invalid_field(ctsio, in ctl_unmap()
5862 ctl_set_lba_out_of_range(ctsio, in ctl_unmap()
5864 ctl_done((union ctl_io *)ctsio); in ctl_unmap()
5877 ctl_set_success(ctsio); in ctl_unmap()
5883 &ctsio->io_hdr.ctl_private[CTL_PRIV_LBA_LEN]; in ctl_unmap()
5887 ctl_try_unblock_others(lun, (union ctl_io *)ctsio, FALSE); in ctl_unmap()
5890 retval = lun->backend->config_write((union ctl_io *)ctsio); in ctl_unmap()
5894 if (ctsio->io_hdr.flags & CTL_FLAG_ALLOCATED) { in ctl_unmap()
5895 free(ctsio->kern_data_ptr, M_CTL); in ctl_unmap()
5896 ctsio->io_hdr.flags &= ~CTL_FLAG_ALLOCATED; in ctl_unmap()
5898 ctl_done((union ctl_io *)ctsio); in ctl_unmap()
5903 ctl_default_page_handler(struct ctl_scsiio *ctsio, in ctl_default_page_handler() argument
5906 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_default_page_handler()
5911 initidx = ctl_get_initindex(&ctsio->io_hdr.nexus); in ctl_default_page_handler()
5927 ctl_get_initindex(&ctsio->io_hdr.nexus), in ctl_default_page_handler()
5958 ctl_ie_page_handler(struct ctl_scsiio *ctsio, in ctl_ie_page_handler() argument
5961 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_ie_page_handler()
5965 (void)ctl_default_page_handler(ctsio, page_index, page_ptr); in ctl_ie_page_handler()
6006 struct ctl_scsiio *ctsio; in ctl_do_mode_select() local
6014 ctsio = &io->scsiio; in ctl_do_mode_select()
6019 ctsio->io_hdr.ctl_private[CTL_PRIV_MODEPAGE].bytes; in ctl_do_mode_select()
6026 (ctsio->kern_data_ptr + *len_used); in ctl_do_mode_select()
6029 free(ctsio->kern_data_ptr, M_CTL); in ctl_do_mode_select()
6030 ctl_set_success(ctsio); in ctl_do_mode_select()
6031 ctl_done((union ctl_io *)ctsio); in ctl_do_mode_select()
6034 free(ctsio->kern_data_ptr, M_CTL); in ctl_do_mode_select()
6035 ctl_set_param_len_error(ctsio); in ctl_do_mode_select()
6036 ctl_done((union ctl_io *)ctsio); in ctl_do_mode_select()
6041 free(ctsio->kern_data_ptr, M_CTL); in ctl_do_mode_select()
6042 ctl_set_param_len_error(ctsio); in ctl_do_mode_select()
6043 ctl_done((union ctl_io *)ctsio); in ctl_do_mode_select()
6098 ctl_set_invalid_field(ctsio, in ctl_do_mode_select()
6104 free(ctsio->kern_data_ptr, M_CTL); in ctl_do_mode_select()
6105 ctl_done((union ctl_io *)ctsio); in ctl_do_mode_select()
6123 ctl_set_invalid_field(ctsio, in ctl_do_mode_select()
6129 free(ctsio->kern_data_ptr, M_CTL); in ctl_do_mode_select()
6130 ctl_done((union ctl_io *)ctsio); in ctl_do_mode_select()
6134 free(ctsio->kern_data_ptr, M_CTL); in ctl_do_mode_select()
6135 ctl_set_param_len_error(ctsio); in ctl_do_mode_select()
6136 ctl_done((union ctl_io *)ctsio); in ctl_do_mode_select()
6174 ctl_set_invalid_field(ctsio, in ctl_do_mode_select()
6180 free(ctsio->kern_data_ptr, M_CTL); in ctl_do_mode_select()
6181 ctl_done((union ctl_io *)ctsio); in ctl_do_mode_select()
6193 retval = page_index->select_handler(ctsio, page_index, in ctl_do_mode_select()
6213 ctl_set_success(ctsio); in ctl_do_mode_select()
6214 free(ctsio->kern_data_ptr, M_CTL); in ctl_do_mode_select()
6215 ctl_done((union ctl_io *)ctsio); in ctl_do_mode_select()
6224 ctl_mode_select(struct ctl_scsiio *ctsio) in ctl_mode_select() argument
6226 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_mode_select()
6231 initidx = ctl_get_initindex(&ctsio->io_hdr.nexus); in ctl_mode_select()
6232 switch (ctsio->cdb[0]) { in ctl_mode_select()
6236 cdb = (struct scsi_mode_select_6 *)ctsio->cdb; in ctl_mode_select()
6246 cdb = (struct scsi_mode_select_10 *)ctsio->cdb; in ctl_mode_select()
6254 ctl_set_invalid_opcode(ctsio); in ctl_mode_select()
6255 ctl_done((union ctl_io *)ctsio); in ctl_mode_select()
6261 ctl_set_invalid_field(ctsio, /*sks_valid*/ 0, in ctl_mode_select()
6264 ctl_done((union ctl_io *)ctsio); in ctl_mode_select()
6278 ctl_set_success(ctsio); in ctl_mode_select()
6279 ctl_done((union ctl_io *)ctsio); in ctl_mode_select()
6289 ctl_set_success(ctsio); in ctl_mode_select()
6290 ctl_done((union ctl_io *)ctsio); in ctl_mode_select()
6299 ctl_set_param_len_error(ctsio); in ctl_mode_select()
6300 ctl_done((union ctl_io *)ctsio); in ctl_mode_select()
6310 if ((ctsio->io_hdr.flags & CTL_FLAG_ALLOCATED) == 0) { in ctl_mode_select()
6311 ctsio->kern_data_ptr = malloc(param_len, M_CTL, M_WAITOK); in ctl_mode_select()
6312 ctsio->kern_data_len = param_len; in ctl_mode_select()
6313 ctsio->kern_total_len = param_len; in ctl_mode_select()
6314 ctsio->kern_rel_offset = 0; in ctl_mode_select()
6315 ctsio->kern_sg_entries = 0; in ctl_mode_select()
6316 ctsio->io_hdr.flags |= CTL_FLAG_ALLOCATED; in ctl_mode_select()
6317 ctsio->be_move_done = ctl_config_move_done; in ctl_mode_select()
6318 ctl_datamove((union ctl_io *)ctsio); in ctl_mode_select()
6323 switch (ctsio->cdb[0]) { in ctl_mode_select()
6327 mh6 = (struct scsi_mode_header_6 *)ctsio->kern_data_ptr; in ctl_mode_select()
6334 mh10 = (struct scsi_mode_header_10 *)ctsio->kern_data_ptr; in ctl_mode_select()
6339 panic("%s: Invalid CDB type %#x", __func__, ctsio->cdb[0]); in ctl_mode_select()
6343 free(ctsio->kern_data_ptr, M_CTL); in ctl_mode_select()
6344 ctl_set_param_len_error(ctsio); in ctl_mode_select()
6345 ctl_done((union ctl_io *)ctsio); in ctl_mode_select()
6355 ctsio->io_hdr.flags |= CTL_FLAG_IO_CONT; in ctl_mode_select()
6356 ctsio->io_cont = ctl_do_mode_select; in ctl_mode_select()
6359 ctsio->io_hdr.ctl_private[CTL_PRIV_MODEPAGE].bytes; in ctl_mode_select()
6364 return (ctl_do_mode_select((union ctl_io *)ctsio)); in ctl_mode_select()
6368 ctl_mode_sense(struct ctl_scsiio *ctsio) in ctl_mode_sense() argument
6370 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_mode_sense()
6380 switch (ctsio->cdb[0]) { in ctl_mode_sense()
6384 cdb = (struct scsi_mode_sense_6 *)ctsio->cdb; in ctl_mode_sense()
6402 cdb = (struct scsi_mode_sense_10 *)ctsio->cdb; in ctl_mode_sense()
6424 ctl_set_invalid_opcode(ctsio); in ctl_mode_sense()
6425 ctl_done((union ctl_io *)ctsio); in ctl_mode_sense()
6447 ctl_set_invalid_field(ctsio, in ctl_mode_sense()
6453 ctl_done((union ctl_io *)ctsio); in ctl_mode_sense()
6515 ctl_set_invalid_field(ctsio, in ctl_mode_sense()
6521 ctl_done((union ctl_io *)ctsio); in ctl_mode_sense()
6530 ctsio->kern_data_ptr = malloc(total_len, M_CTL, M_WAITOK | M_ZERO); in ctl_mode_sense()
6531 ctsio->kern_sg_entries = 0; in ctl_mode_sense()
6532 ctsio->kern_rel_offset = 0; in ctl_mode_sense()
6533 ctsio->kern_data_len = min(total_len, alloc_len); in ctl_mode_sense()
6534 ctsio->kern_total_len = ctsio->kern_data_len; in ctl_mode_sense()
6536 switch (ctsio->cdb[0]) { in ctl_mode_sense()
6540 header = (struct scsi_mode_hdr_6 *)ctsio->kern_data_ptr; in ctl_mode_sense()
6557 header = (struct scsi_mode_hdr_10 *)ctsio->kern_data_ptr; in ctl_mode_sense()
6574 panic("%s: Invalid CDB type %#x", __func__, ctsio->cdb[0]); in ctl_mode_sense()
6638 page_index->sense_handler(ctsio, page_index,pc); in ctl_mode_sense()
6640 memcpy(ctsio->kern_data_ptr + data_used, in ctl_mode_sense()
6683 page_index->sense_handler(ctsio, page_index,pc); in ctl_mode_sense()
6685 memcpy(ctsio->kern_data_ptr + data_used, in ctl_mode_sense()
6695 ctl_set_success(ctsio); in ctl_mode_sense()
6696 ctsio->io_hdr.flags |= CTL_FLAG_ALLOCATED; in ctl_mode_sense()
6697 ctsio->be_move_done = ctl_config_move_done; in ctl_mode_sense()
6698 ctl_datamove((union ctl_io *)ctsio); in ctl_mode_sense()
6703 ctl_temp_log_sense_handler(struct ctl_scsiio *ctsio, in ctl_temp_log_sense_handler() argument
6707 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_temp_log_sense_handler()
6737 ctl_lbp_log_sense_handler(struct ctl_scsiio *ctsio, in ctl_lbp_log_sense_handler() argument
6741 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_lbp_log_sense_handler()
6805 ctl_sap_log_sense_handler(struct ctl_scsiio *ctsio, in ctl_sap_log_sense_handler() argument
6809 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_sap_log_sense_handler()
6854 ctl_ie_log_sense_handler(struct ctl_scsiio *ctsio, in ctl_ie_log_sense_handler() argument
6858 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_ie_log_sense_handler()
6879 ctl_log_sense(struct ctl_scsiio *ctsio) in ctl_log_sense() argument
6881 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_log_sense()
6890 cdb = (struct scsi_log_sense *)ctsio->cdb; in ctl_log_sense()
6911 ctl_set_invalid_field(ctsio, in ctl_log_sense()
6917 ctl_done((union ctl_io *)ctsio); in ctl_log_sense()
6923 ctsio->kern_data_ptr = malloc(total_len, M_CTL, M_WAITOK | M_ZERO); in ctl_log_sense()
6924 ctsio->kern_sg_entries = 0; in ctl_log_sense()
6925 ctsio->kern_rel_offset = 0; in ctl_log_sense()
6926 ctsio->kern_data_len = min(total_len, alloc_len); in ctl_log_sense()
6927 ctsio->kern_total_len = ctsio->kern_data_len; in ctl_log_sense()
6929 header = (struct scsi_log_header *)ctsio->kern_data_ptr; in ctl_log_sense()
6944 page_index->sense_handler(ctsio, page_index, pc); in ctl_log_sense()
6948 ctl_set_success(ctsio); in ctl_log_sense()
6949 ctsio->io_hdr.flags |= CTL_FLAG_ALLOCATED; in ctl_log_sense()
6950 ctsio->be_move_done = ctl_config_move_done; in ctl_log_sense()
6951 ctl_datamove((union ctl_io *)ctsio); in ctl_log_sense()
6956 ctl_read_capacity(struct ctl_scsiio *ctsio) in ctl_read_capacity() argument
6958 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_read_capacity()
6965 cdb = (struct scsi_read_capacity *)ctsio->cdb; in ctl_read_capacity()
6970 ctl_set_invalid_field(/*ctsio*/ ctsio, in ctl_read_capacity()
6976 ctl_done((union ctl_io *)ctsio); in ctl_read_capacity()
6980 ctsio->kern_data_ptr = malloc(sizeof(*data), M_CTL, M_WAITOK | M_ZERO); in ctl_read_capacity()
6981 data = (struct scsi_read_capacity_data *)ctsio->kern_data_ptr; in ctl_read_capacity()
6982 ctsio->kern_data_len = sizeof(*data); in ctl_read_capacity()
6983 ctsio->kern_total_len = sizeof(*data); in ctl_read_capacity()
6984 ctsio->kern_rel_offset = 0; in ctl_read_capacity()
6985 ctsio->kern_sg_entries = 0; in ctl_read_capacity()
7002 ctl_set_success(ctsio); in ctl_read_capacity()
7003 ctsio->io_hdr.flags |= CTL_FLAG_ALLOCATED; in ctl_read_capacity()
7004 ctsio->be_move_done = ctl_config_move_done; in ctl_read_capacity()
7005 ctl_datamove((union ctl_io *)ctsio); in ctl_read_capacity()
7010 ctl_read_capacity_16(struct ctl_scsiio *ctsio) in ctl_read_capacity_16() argument
7012 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_read_capacity_16()
7020 cdb = (struct scsi_read_capacity_16 *)ctsio->cdb; in ctl_read_capacity_16()
7027 ctl_set_invalid_field(/*ctsio*/ ctsio, in ctl_read_capacity_16()
7033 ctl_done((union ctl_io *)ctsio); in ctl_read_capacity_16()
7037 ctsio->kern_data_ptr = malloc(sizeof(*data), M_CTL, M_WAITOK | M_ZERO); in ctl_read_capacity_16()
7038 data = (struct scsi_read_capacity_data_long *)ctsio->kern_data_ptr; in ctl_read_capacity_16()
7039 ctsio->kern_rel_offset = 0; in ctl_read_capacity_16()
7040 ctsio->kern_sg_entries = 0; in ctl_read_capacity_16()
7041 ctsio->kern_data_len = min(sizeof(*data), alloc_len); in ctl_read_capacity_16()
7042 ctsio->kern_total_len = ctsio->kern_data_len; in ctl_read_capacity_16()
7052 ctl_set_success(ctsio); in ctl_read_capacity_16()
7053 ctsio->io_hdr.flags |= CTL_FLAG_ALLOCATED; in ctl_read_capacity_16()
7054 ctsio->be_move_done = ctl_config_move_done; in ctl_read_capacity_16()
7055 ctl_datamove((union ctl_io *)ctsio); in ctl_read_capacity_16()
7060 ctl_get_lba_status(struct ctl_scsiio *ctsio) in ctl_get_lba_status() argument
7062 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_get_lba_status()
7072 cdb = (struct scsi_get_lba_status *)ctsio->cdb; in ctl_get_lba_status()
7077 ctl_set_lba_out_of_range(ctsio, lba); in ctl_get_lba_status()
7078 ctl_done((union ctl_io *)ctsio); in ctl_get_lba_status()
7083 ctsio->kern_data_ptr = malloc(total_len, M_CTL, M_WAITOK | M_ZERO); in ctl_get_lba_status()
7084 data = (struct scsi_get_lba_status_data *)ctsio->kern_data_ptr; in ctl_get_lba_status()
7085 ctsio->kern_rel_offset = 0; in ctl_get_lba_status()
7086 ctsio->kern_sg_entries = 0; in ctl_get_lba_status()
7087 ctsio->kern_data_len = min(total_len, alloc_len); in ctl_get_lba_status()
7088 ctsio->kern_total_len = ctsio->kern_data_len; in ctl_get_lba_status()
7097 ctl_set_success(ctsio); in ctl_get_lba_status()
7098 ctsio->io_hdr.flags |= CTL_FLAG_ALLOCATED; in ctl_get_lba_status()
7099 ctsio->be_move_done = ctl_config_move_done; in ctl_get_lba_status()
7101 lbalen = (struct ctl_lba_len_flags *)&ctsio->io_hdr.ctl_private[CTL_PRIV_LBA_LEN]; in ctl_get_lba_status()
7105 retval = lun->backend->config_read((union ctl_io *)ctsio); in ctl_get_lba_status()
7110 ctl_read_defect(struct ctl_scsiio *ctsio) in ctl_read_defect() argument
7121 if (ctsio->cdb[0] == READ_DEFECT_DATA_10) { in ctl_read_defect()
7122 ccb10 = (struct scsi_read_defect_data_10 *)&ctsio->cdb; in ctl_read_defect()
7127 ccb12 = (struct scsi_read_defect_data_12 *)&ctsio->cdb; in ctl_read_defect()
7133 ctl_set_success(ctsio); in ctl_read_defect()
7134 ctl_done((union ctl_io *)ctsio); in ctl_read_defect()
7138 ctsio->kern_data_ptr = malloc(data_len, M_CTL, M_WAITOK | M_ZERO); in ctl_read_defect()
7139 ctsio->kern_rel_offset = 0; in ctl_read_defect()
7140 ctsio->kern_sg_entries = 0; in ctl_read_defect()
7141 ctsio->kern_data_len = min(data_len, alloc_len); in ctl_read_defect()
7142 ctsio->kern_total_len = ctsio->kern_data_len; in ctl_read_defect()
7144 if (ctsio->cdb[0] == READ_DEFECT_DATA_10) { in ctl_read_defect()
7146 ctsio->kern_data_ptr; in ctl_read_defect()
7151 ctsio->kern_data_ptr; in ctl_read_defect()
7157 ctl_set_success(ctsio); in ctl_read_defect()
7158 ctsio->io_hdr.flags |= CTL_FLAG_ALLOCATED; in ctl_read_defect()
7159 ctsio->be_move_done = ctl_config_move_done; in ctl_read_defect()
7160 ctl_datamove((union ctl_io *)ctsio); in ctl_read_defect()
7165 ctl_report_ident_info(struct ctl_scsiio *ctsio) in ctl_report_ident_info() argument
7167 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_report_ident_info()
7176 cdb = (struct scsi_report_ident_info *)ctsio->cdb; in ctl_report_ident_info()
7197 ctl_set_invalid_field(/*ctsio*/ ctsio, in ctl_report_ident_info()
7203 ctl_done((union ctl_io *)ctsio); in ctl_report_ident_info()
7209 ctsio->kern_data_ptr = malloc(total_len, M_CTL, M_WAITOK | M_ZERO); in ctl_report_ident_info()
7210 ctsio->kern_sg_entries = 0; in ctl_report_ident_info()
7211 ctsio->kern_rel_offset = 0; in ctl_report_ident_info()
7212 ctsio->kern_data_len = min(total_len, alloc_len); in ctl_report_ident_info()
7213 ctsio->kern_total_len = ctsio->kern_data_len; in ctl_report_ident_info()
7215 rii_ptr = (struct scsi_report_ident_info_data *)ctsio->kern_data_ptr; in ctl_report_ident_info()
7239 ctl_set_success(ctsio); in ctl_report_ident_info()
7240 ctsio->io_hdr.flags |= CTL_FLAG_ALLOCATED; in ctl_report_ident_info()
7241 ctsio->be_move_done = ctl_config_move_done; in ctl_report_ident_info()
7242 ctl_datamove((union ctl_io *)ctsio); in ctl_report_ident_info()
7247 ctl_report_tagret_port_groups(struct ctl_scsiio *ctsio) in ctl_report_tagret_port_groups() argument
7249 struct ctl_softc *softc = CTL_SOFTC(ctsio); in ctl_report_tagret_port_groups()
7250 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_report_tagret_port_groups()
7262 cdb = (struct scsi_maintenance_in *)ctsio->cdb; in ctl_report_tagret_port_groups()
7273 ctl_set_invalid_field(/*ctsio*/ ctsio, in ctl_report_tagret_port_groups()
7279 ctl_done((union ctl_io *)ctsio); in ctl_report_tagret_port_groups()
7308 ctsio->kern_data_ptr = malloc(total_len, M_CTL, M_WAITOK | M_ZERO); in ctl_report_tagret_port_groups()
7309 ctsio->kern_sg_entries = 0; in ctl_report_tagret_port_groups()
7310 ctsio->kern_rel_offset = 0; in ctl_report_tagret_port_groups()
7311 ctsio->kern_data_len = min(total_len, alloc_len); in ctl_report_tagret_port_groups()
7312 ctsio->kern_total_len = ctsio->kern_data_len; in ctl_report_tagret_port_groups()
7316 ctsio->kern_data_ptr; in ctl_report_tagret_port_groups()
7323 ctsio->kern_data_ptr; in ctl_report_tagret_port_groups()
7408 ctl_set_success(ctsio); in ctl_report_tagret_port_groups()
7409 ctsio->io_hdr.flags |= CTL_FLAG_ALLOCATED; in ctl_report_tagret_port_groups()
7410 ctsio->be_move_done = ctl_config_move_done; in ctl_report_tagret_port_groups()
7411 ctl_datamove((union ctl_io *)ctsio); in ctl_report_tagret_port_groups()
7416 ctl_report_supported_opcodes(struct ctl_scsiio *ctsio) in ctl_report_supported_opcodes() argument
7418 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_report_supported_opcodes()
7430 cdb = (struct scsi_report_supported_opcodes *)ctsio->cdb; in ctl_report_supported_opcodes()
7470 ctl_set_invalid_field(/*ctsio*/ ctsio, in ctl_report_supported_opcodes()
7476 ctl_done((union ctl_io *)ctsio); in ctl_report_supported_opcodes()
7483 ctl_set_invalid_field(/*ctsio*/ ctsio, in ctl_report_supported_opcodes()
7489 ctl_done((union ctl_io *)ctsio); in ctl_report_supported_opcodes()
7495 ctsio->kern_data_ptr = malloc(total_len, M_CTL, M_WAITOK | M_ZERO); in ctl_report_supported_opcodes()
7496 ctsio->kern_sg_entries = 0; in ctl_report_supported_opcodes()
7497 ctsio->kern_rel_offset = 0; in ctl_report_supported_opcodes()
7498 ctsio->kern_data_len = min(total_len, alloc_len); in ctl_report_supported_opcodes()
7499 ctsio->kern_total_len = ctsio->kern_data_len; in ctl_report_supported_opcodes()
7504 ctsio->kern_data_ptr; in ctl_report_supported_opcodes()
7539 ctsio->kern_data_ptr; in ctl_report_supported_opcodes()
7544 ctsio->kern_data_ptr; in ctl_report_supported_opcodes()
7560 ctsio->kern_data_ptr; in ctl_report_supported_opcodes()
7572 ctl_set_success(ctsio); in ctl_report_supported_opcodes()
7573 ctsio->io_hdr.flags |= CTL_FLAG_ALLOCATED; in ctl_report_supported_opcodes()
7574 ctsio->be_move_done = ctl_config_move_done; in ctl_report_supported_opcodes()
7575 ctl_datamove((union ctl_io *)ctsio); in ctl_report_supported_opcodes()
7580 ctl_report_supported_tmf(struct ctl_scsiio *ctsio) in ctl_report_supported_tmf() argument
7589 cdb = (struct scsi_report_supported_tmf *)ctsio->cdb; in ctl_report_supported_tmf()
7599 ctsio->kern_data_ptr = malloc(total_len, M_CTL, M_WAITOK | M_ZERO); in ctl_report_supported_tmf()
7600 ctsio->kern_sg_entries = 0; in ctl_report_supported_tmf()
7601 ctsio->kern_rel_offset = 0; in ctl_report_supported_tmf()
7602 ctsio->kern_data_len = min(total_len, alloc_len); in ctl_report_supported_tmf()
7603 ctsio->kern_total_len = ctsio->kern_data_len; in ctl_report_supported_tmf()
7605 data = (struct scsi_report_supported_tmf_ext_data *)ctsio->kern_data_ptr; in ctl_report_supported_tmf()
7611 ctl_set_success(ctsio); in ctl_report_supported_tmf()
7612 ctsio->io_hdr.flags |= CTL_FLAG_ALLOCATED; in ctl_report_supported_tmf()
7613 ctsio->be_move_done = ctl_config_move_done; in ctl_report_supported_tmf()
7614 ctl_datamove((union ctl_io *)ctsio); in ctl_report_supported_tmf()
7619 ctl_report_timestamp(struct ctl_scsiio *ctsio) in ctl_report_timestamp() argument
7630 cdb = (struct scsi_report_timestamp *)ctsio->cdb; in ctl_report_timestamp()
7637 ctsio->kern_data_ptr = malloc(total_len, M_CTL, M_WAITOK | M_ZERO); in ctl_report_timestamp()
7638 ctsio->kern_sg_entries = 0; in ctl_report_timestamp()
7639 ctsio->kern_rel_offset = 0; in ctl_report_timestamp()
7640 ctsio->kern_data_len = min(total_len, alloc_len); in ctl_report_timestamp()
7641 ctsio->kern_total_len = ctsio->kern_data_len; in ctl_report_timestamp()
7643 data = (struct scsi_report_timestamp_data *)ctsio->kern_data_ptr; in ctl_report_timestamp()
7651 ctl_set_success(ctsio); in ctl_report_timestamp()
7652 ctsio->io_hdr.flags |= CTL_FLAG_ALLOCATED; in ctl_report_timestamp()
7653 ctsio->be_move_done = ctl_config_move_done; in ctl_report_timestamp()
7654 ctl_datamove((union ctl_io *)ctsio); in ctl_report_timestamp()
7659 ctl_persistent_reserve_in(struct ctl_scsiio *ctsio) in ctl_persistent_reserve_in() argument
7661 struct ctl_softc *softc = CTL_SOFTC(ctsio); in ctl_persistent_reserve_in()
7662 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_persistent_reserve_in()
7670 cdb = (struct scsi_per_res_in *)ctsio->cdb; in ctl_persistent_reserve_in()
7701 ctsio->kern_data_ptr = malloc(total_len, M_CTL, M_WAITOK | M_ZERO); in ctl_persistent_reserve_in()
7702 ctsio->kern_rel_offset = 0; in ctl_persistent_reserve_in()
7703 ctsio->kern_sg_entries = 0; in ctl_persistent_reserve_in()
7704 ctsio->kern_data_len = min(total_len, alloc_len); in ctl_persistent_reserve_in()
7705 ctsio->kern_total_len = ctsio->kern_data_len; in ctl_persistent_reserve_in()
7713 res_keys = (struct scsi_per_res_in_keys*)ctsio->kern_data_ptr; in ctl_persistent_reserve_in()
7726 free(ctsio->kern_data_ptr, M_CTL); in ctl_persistent_reserve_in()
7761 res = (struct scsi_per_res_in_rsrv *)ctsio->kern_data_ptr; in ctl_persistent_reserve_in()
7786 free(ctsio->kern_data_ptr, M_CTL); in ctl_persistent_reserve_in()
7814 res_cap = (struct scsi_per_res_cap *)ctsio->kern_data_ptr; in ctl_persistent_reserve_in()
7833 res_status = (struct scsi_per_res_in_full*)ctsio->kern_data_ptr; in ctl_persistent_reserve_in()
7846 free(ctsio->kern_data_ptr, M_CTL); in ctl_persistent_reserve_in()
7887 ctl_set_success(ctsio); in ctl_persistent_reserve_in()
7888 ctsio->io_hdr.flags |= CTL_FLAG_ALLOCATED; in ctl_persistent_reserve_in()
7889 ctsio->be_move_done = ctl_config_move_done; in ctl_persistent_reserve_in()
7890 ctl_datamove((union ctl_io *)ctsio); in ctl_persistent_reserve_in()
7901 struct ctl_scsiio *ctsio, struct scsi_per_res_out *cdb, in ctl_pro_preempt() argument
7914 ctl_set_invalid_field(/*ctsio*/ ctsio, in ctl_pro_preempt()
7920 ctl_done((union ctl_io *)ctsio); in ctl_pro_preempt()
7926 ctl_set_invalid_field(/*ctsio*/ ctsio, in ctl_pro_preempt()
7932 ctl_done((union ctl_io *)ctsio); in ctl_pro_preempt()
7956 persis_io.hdr.nexus = ctsio->io_hdr.nexus; in ctl_pro_preempt()
7969 free(ctsio->kern_data_ptr, M_CTL); in ctl_pro_preempt()
7970 ctl_set_invalid_field(ctsio, in ctl_pro_preempt()
7976 ctl_done((union ctl_io *)ctsio); in ctl_pro_preempt()
7995 free(ctsio->kern_data_ptr, M_CTL); in ctl_pro_preempt()
7996 ctl_set_invalid_field(ctsio, in ctl_pro_preempt()
8002 ctl_done((union ctl_io *)ctsio); in ctl_pro_preempt()
8017 free(ctsio->kern_data_ptr, M_CTL); in ctl_pro_preempt()
8018 ctl_set_reservation_conflict(ctsio); in ctl_pro_preempt()
8019 ctl_done((union ctl_io *)ctsio); in ctl_pro_preempt()
8026 persis_io.hdr.nexus = ctsio->io_hdr.nexus; in ctl_pro_preempt()
8044 ctl_set_invalid_field(/*ctsio*/ ctsio, in ctl_pro_preempt()
8050 ctl_done((union ctl_io *)ctsio); in ctl_pro_preempt()
8056 ctl_set_invalid_field(/*ctsio*/ ctsio, in ctl_pro_preempt()
8062 ctl_done((union ctl_io *)ctsio); in ctl_pro_preempt()
8103 persis_io.hdr.nexus = ctsio->io_hdr.nexus; in ctl_pro_preempt()
8132 free(ctsio->kern_data_ptr, M_CTL); in ctl_pro_preempt()
8133 ctl_set_reservation_conflict(ctsio); in ctl_pro_preempt()
8134 ctl_done((union ctl_io *)ctsio); in ctl_pro_preempt()
8140 persis_io.hdr.nexus = ctsio->io_hdr.nexus; in ctl_pro_preempt()
8223 ctl_persistent_reserve_out(struct ctl_scsiio *ctsio) in ctl_persistent_reserve_out() argument
8225 struct ctl_softc *softc = CTL_SOFTC(ctsio); in ctl_persistent_reserve_out()
8226 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_persistent_reserve_out()
8239 cdb = (struct scsi_per_res_out *)ctsio->cdb; in ctl_persistent_reserve_out()
8252 ctl_set_invalid_field(/*ctsio*/ ctsio, in ctl_persistent_reserve_out()
8258 ctl_done((union ctl_io *)ctsio); in ctl_persistent_reserve_out()
8263 ctl_set_invalid_field(/*ctsio*/ ctsio, in ctl_persistent_reserve_out()
8269 ctl_done((union ctl_io *)ctsio); in ctl_persistent_reserve_out()
8278 ctl_set_invalid_field(ctsio, in ctl_persistent_reserve_out()
8284 ctl_done((union ctl_io *)ctsio); in ctl_persistent_reserve_out()
8288 if ((ctsio->io_hdr.flags & CTL_FLAG_ALLOCATED) == 0) { in ctl_persistent_reserve_out()
8289 ctsio->kern_data_ptr = malloc(param_len, M_CTL, M_WAITOK); in ctl_persistent_reserve_out()
8290 ctsio->kern_data_len = param_len; in ctl_persistent_reserve_out()
8291 ctsio->kern_total_len = param_len; in ctl_persistent_reserve_out()
8292 ctsio->kern_rel_offset = 0; in ctl_persistent_reserve_out()
8293 ctsio->kern_sg_entries = 0; in ctl_persistent_reserve_out()
8294 ctsio->io_hdr.flags |= CTL_FLAG_ALLOCATED; in ctl_persistent_reserve_out()
8295 ctsio->be_move_done = ctl_config_move_done; in ctl_persistent_reserve_out()
8296 ctl_datamove((union ctl_io *)ctsio); in ctl_persistent_reserve_out()
8301 param = (struct scsi_per_res_out_parms *)ctsio->kern_data_ptr; in ctl_persistent_reserve_out()
8303 residx = ctl_get_initindex(&ctsio->io_hdr.nexus); in ctl_persistent_reserve_out()
8321 free(ctsio->kern_data_ptr, M_CTL); in ctl_persistent_reserve_out()
8322 ctl_set_reservation_conflict(ctsio); in ctl_persistent_reserve_out()
8323 ctl_done((union ctl_io *)ctsio); in ctl_persistent_reserve_out()
8331 free(ctsio->kern_data_ptr, M_CTL); in ctl_persistent_reserve_out()
8332 ctl_set_reservation_conflict(ctsio); in ctl_persistent_reserve_out()
8333 ctl_done((union ctl_io *)ctsio); in ctl_persistent_reserve_out()
8341 free(ctsio->kern_data_ptr, M_CTL); in ctl_persistent_reserve_out()
8342 ctl_set_reservation_conflict(ctsio); in ctl_persistent_reserve_out()
8343 ctl_done((union ctl_io *)ctsio); in ctl_persistent_reserve_out()
8369 free(ctsio->kern_data_ptr, M_CTL); in ctl_persistent_reserve_out()
8370 ctl_set_invalid_field(ctsio, in ctl_persistent_reserve_out()
8376 ctl_done((union ctl_io *)ctsio); in ctl_persistent_reserve_out()
8431 persis_io.hdr.nexus = ctsio->io_hdr.nexus; in ctl_persistent_reserve_out()
8449 persis_io.hdr.nexus = ctsio->io_hdr.nexus; in ctl_persistent_reserve_out()
8474 free(ctsio->kern_data_ptr, M_CTL); in ctl_persistent_reserve_out()
8475 ctl_set_reservation_conflict(ctsio); in ctl_persistent_reserve_out()
8476 ctl_done((union ctl_io *)ctsio); in ctl_persistent_reserve_out()
8497 persis_io.hdr.nexus = ctsio->io_hdr.nexus; in ctl_persistent_reserve_out()
8529 free(ctsio->kern_data_ptr, M_CTL); in ctl_persistent_reserve_out()
8530 ctl_set_illegal_pr_release(ctsio); in ctl_persistent_reserve_out()
8531 ctl_done((union ctl_io *)ctsio); in ctl_persistent_reserve_out()
8555 persis_io.hdr.nexus = ctsio->io_hdr.nexus; in ctl_persistent_reserve_out()
8580 persis_io.hdr.nexus = ctsio->io_hdr.nexus; in ctl_persistent_reserve_out()
8592 residx, ctsio, cdb, param); in ctl_persistent_reserve_out()
8602 free(ctsio->kern_data_ptr, M_CTL); in ctl_persistent_reserve_out()
8603 ctl_set_success(ctsio); in ctl_persistent_reserve_out()
8604 ctl_done((union ctl_io *)ctsio); in ctl_persistent_reserve_out()
8737 ctl_read_write(struct ctl_scsiio *ctsio) in ctl_read_write() argument
8739 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_read_write()
8746 CTL_DEBUG_PRINT(("ctl_read_write: command: %#x\n", ctsio->cdb[0])); in ctl_read_write()
8749 isread = ctsio->cdb[0] == READ_6 || ctsio->cdb[0] == READ_10 in ctl_read_write()
8750 || ctsio->cdb[0] == READ_12 || ctsio->cdb[0] == READ_16; in ctl_read_write()
8751 switch (ctsio->cdb[0]) { in ctl_read_write()
8756 cdb = (struct scsi_rw_6 *)ctsio->cdb; in ctl_read_write()
8773 cdb = (struct scsi_rw_10 *)ctsio->cdb; in ctl_read_write()
8785 cdb = (struct scsi_write_verify_10 *)ctsio->cdb; in ctl_read_write()
8797 cdb = (struct scsi_rw_12 *)ctsio->cdb; in ctl_read_write()
8809 cdb = (struct scsi_write_verify_12 *)ctsio->cdb; in ctl_read_write()
8821 cdb = (struct scsi_rw_16 *)ctsio->cdb; in ctl_read_write()
8834 ctl_set_invalid_opcode(ctsio); in ctl_read_write()
8835 ctl_done((union ctl_io *)ctsio); in ctl_read_write()
8839 cdb = (struct scsi_write_atomic_16 *)ctsio->cdb; in ctl_read_write()
8847 ctl_set_invalid_field(ctsio, /*sks_valid*/ 1, in ctl_read_write()
8850 ctl_done((union ctl_io *)ctsio); in ctl_read_write()
8858 cdb = (struct scsi_write_verify_16 *)ctsio->cdb; in ctl_read_write()
8871 ctl_set_invalid_opcode(ctsio); in ctl_read_write()
8872 ctl_done((union ctl_io *)ctsio); in ctl_read_write()
8886 ctl_set_lba_out_of_range(ctsio, in ctl_read_write()
8888 ctl_done((union ctl_io *)ctsio); in ctl_read_write()
8898 ctl_set_success(ctsio); in ctl_read_write()
8899 ctl_done((union ctl_io *)ctsio); in ctl_read_write()
8913 &ctsio->io_hdr.ctl_private[CTL_PRIV_LBA_LEN]; in ctl_read_write()
8918 ctsio->kern_total_len = num_blocks * lun->be_lun->blocksize; in ctl_read_write()
8919 ctsio->kern_rel_offset = 0; in ctl_read_write()
8923 retval = lun->backend->data_submit((union ctl_io *)ctsio); in ctl_read_write()
8931 struct ctl_scsiio *ctsio; in ctl_cnw_cont() local
8937 ctsio = &io->scsiio; in ctl_cnw_cont()
8938 ctsio->io_hdr.status = CTL_STATUS_NONE; in ctl_cnw_cont()
8939 ctsio->io_hdr.flags &= ~CTL_FLAG_IO_CONT; in ctl_cnw_cont()
8941 &ctsio->io_hdr.ctl_private[CTL_PRIV_LBA_LEN]; in ctl_cnw_cont()
8946 retval = lun->backend->data_submit((union ctl_io *)ctsio); in ctl_cnw_cont()
8951 ctl_cnw(struct ctl_scsiio *ctsio) in ctl_cnw() argument
8953 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_cnw()
8959 CTL_DEBUG_PRINT(("ctl_cnw: command: %#x\n", ctsio->cdb[0])); in ctl_cnw()
8962 switch (ctsio->cdb[0]) { in ctl_cnw()
8966 cdb = (struct scsi_compare_and_write *)ctsio->cdb; in ctl_cnw()
8980 ctl_set_invalid_opcode(ctsio); in ctl_cnw()
8981 ctl_done((union ctl_io *)ctsio); in ctl_cnw()
8995 ctl_set_lba_out_of_range(ctsio, in ctl_cnw()
8997 ctl_done((union ctl_io *)ctsio); in ctl_cnw()
9005 ctl_set_success(ctsio); in ctl_cnw()
9006 ctl_done((union ctl_io *)ctsio); in ctl_cnw()
9014 ctsio->kern_total_len = 2 * num_blocks * lun->be_lun->blocksize; in ctl_cnw()
9015 ctsio->kern_rel_offset = 0; in ctl_cnw()
9022 ctsio->io_hdr.flags |= CTL_FLAG_IO_CONT; in ctl_cnw()
9023 ctsio->io_cont = ctl_cnw_cont; in ctl_cnw()
9026 &ctsio->io_hdr.ctl_private[CTL_PRIV_LBA_LEN]; in ctl_cnw()
9032 retval = lun->backend->data_submit((union ctl_io *)ctsio); in ctl_cnw()
9037 ctl_verify(struct ctl_scsiio *ctsio) in ctl_verify() argument
9039 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_verify()
9046 CTL_DEBUG_PRINT(("ctl_verify: command: %#x\n", ctsio->cdb[0])); in ctl_verify()
9050 switch (ctsio->cdb[0]) { in ctl_verify()
9054 cdb = (struct scsi_verify_10 *)ctsio->cdb; in ctl_verify()
9066 cdb = (struct scsi_verify_12 *)ctsio->cdb; in ctl_verify()
9078 cdb = (struct scsi_rw_16 *)ctsio->cdb; in ctl_verify()
9092 ctl_set_invalid_opcode(ctsio); in ctl_verify()
9093 ctl_done((union ctl_io *)ctsio); in ctl_verify()
9105 ctl_set_lba_out_of_range(ctsio, in ctl_verify()
9107 ctl_done((union ctl_io *)ctsio); in ctl_verify()
9115 ctl_set_success(ctsio); in ctl_verify()
9116 ctl_done((union ctl_io *)ctsio); in ctl_verify()
9121 &ctsio->io_hdr.ctl_private[CTL_PRIV_LBA_LEN]; in ctl_verify()
9126 ctsio->kern_total_len = num_blocks * lun->be_lun->blocksize; in ctl_verify()
9129 ctsio->kern_total_len = 0; in ctl_verify()
9131 ctsio->kern_rel_offset = 0; in ctl_verify()
9134 retval = lun->backend->data_submit((union ctl_io *)ctsio); in ctl_verify()
9139 ctl_report_luns(struct ctl_scsiio *ctsio) in ctl_report_luns() argument
9141 struct ctl_softc *softc = CTL_SOFTC(ctsio); in ctl_report_luns()
9142 struct ctl_port *port = CTL_PORT(ctsio); in ctl_report_luns()
9143 struct ctl_lun *lun, *request_lun = CTL_LUN(ctsio); in ctl_report_luns()
9151 cdb = (struct scsi_report_luns *)ctsio->cdb; in ctl_report_luns()
9175 ctl_set_invalid_field(ctsio, in ctl_report_luns()
9181 ctl_done((union ctl_io *)ctsio); in ctl_report_luns()
9194 ctl_set_invalid_field(ctsio, in ctl_report_luns()
9200 ctl_done((union ctl_io *)ctsio); in ctl_report_luns()
9207 ctsio->kern_data_ptr = malloc(lun_datalen, M_CTL, M_WAITOK | M_ZERO); in ctl_report_luns()
9208 lun_data = (struct scsi_report_luns_data *)ctsio->kern_data_ptr; in ctl_report_luns()
9209 ctsio->kern_sg_entries = 0; in ctl_report_luns()
9211 initidx = ctl_get_initindex(&ctsio->io_hdr.nexus); in ctl_report_luns()
9257 ctsio->kern_rel_offset = 0; in ctl_report_luns()
9258 ctsio->kern_sg_entries = 0; in ctl_report_luns()
9259 ctsio->kern_data_len = min(lun_datalen, alloc_len); in ctl_report_luns()
9260 ctsio->kern_total_len = ctsio->kern_data_len; in ctl_report_luns()
9275 ctl_set_success(ctsio); in ctl_report_luns()
9276 ctsio->io_hdr.flags |= CTL_FLAG_ALLOCATED; in ctl_report_luns()
9277 ctsio->be_move_done = ctl_config_move_done; in ctl_report_luns()
9278 ctl_datamove((union ctl_io *)ctsio); in ctl_report_luns()
9283 ctl_request_sense(struct ctl_scsiio *ctsio) in ctl_request_sense() argument
9285 struct ctl_softc *softc = CTL_SOFTC(ctsio); in ctl_request_sense()
9286 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_request_sense()
9296 cdb = (struct scsi_request_sense *)ctsio->cdb; in ctl_request_sense()
9308 ctsio->kern_data_ptr = malloc(sizeof(*sense_ptr), M_CTL, M_WAITOK); in ctl_request_sense()
9309 sense_ptr = (struct scsi_sense_data *)ctsio->kern_data_ptr; in ctl_request_sense()
9310 ctsio->kern_sg_entries = 0; in ctl_request_sense()
9311 ctsio->kern_rel_offset = 0; in ctl_request_sense()
9312 ctsio->kern_data_len = ctsio->kern_total_len = in ctl_request_sense()
9332 initidx = ctl_get_initindex(&ctsio->io_hdr.nexus); in ctl_request_sense()
9401 ctl_set_success(ctsio); in ctl_request_sense()
9402 ctsio->io_hdr.flags |= CTL_FLAG_ALLOCATED; in ctl_request_sense()
9403 ctsio->be_move_done = ctl_config_move_done; in ctl_request_sense()
9404 ctl_datamove((union ctl_io *)ctsio); in ctl_request_sense()
9409 ctl_tur(struct ctl_scsiio *ctsio) in ctl_tur() argument
9414 ctl_set_success(ctsio); in ctl_tur()
9415 ctl_done((union ctl_io *)ctsio); in ctl_tur()
9424 ctl_inquiry_evpd_supported(struct ctl_scsiio *ctsio, int alloc_len) in ctl_inquiry_evpd_supported() argument
9426 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_inquiry_evpd_supported()
9433 ctsio->kern_data_ptr = malloc(sup_page_size, M_CTL, M_WAITOK | M_ZERO); in ctl_inquiry_evpd_supported()
9434 pages = (struct scsi_vpd_supported_pages *)ctsio->kern_data_ptr; in ctl_inquiry_evpd_supported()
9435 ctsio->kern_rel_offset = 0; in ctl_inquiry_evpd_supported()
9436 ctsio->kern_sg_entries = 0; in ctl_inquiry_evpd_supported()
9437 ctsio->kern_data_len = min(sup_page_size, alloc_len); in ctl_inquiry_evpd_supported()
9438 ctsio->kern_total_len = ctsio->kern_data_len; in ctl_inquiry_evpd_supported()
9478 ctl_set_success(ctsio); in ctl_inquiry_evpd_supported()
9479 ctsio->io_hdr.flags |= CTL_FLAG_ALLOCATED; in ctl_inquiry_evpd_supported()
9480 ctsio->be_move_done = ctl_config_move_done; in ctl_inquiry_evpd_supported()
9481 ctl_datamove((union ctl_io *)ctsio); in ctl_inquiry_evpd_supported()
9489 ctl_inquiry_evpd_serial(struct ctl_scsiio *ctsio, int alloc_len) in ctl_inquiry_evpd_serial() argument
9491 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_inquiry_evpd_serial()
9496 ctsio->kern_data_ptr = malloc(data_len, M_CTL, M_WAITOK | M_ZERO); in ctl_inquiry_evpd_serial()
9497 sn_ptr = (struct scsi_vpd_unit_serial_number *)ctsio->kern_data_ptr; in ctl_inquiry_evpd_serial()
9498 ctsio->kern_rel_offset = 0; in ctl_inquiry_evpd_serial()
9499 ctsio->kern_sg_entries = 0; in ctl_inquiry_evpd_serial()
9500 ctsio->kern_data_len = min(data_len, alloc_len); in ctl_inquiry_evpd_serial()
9501 ctsio->kern_total_len = ctsio->kern_data_len; in ctl_inquiry_evpd_serial()
9526 ctl_set_success(ctsio); in ctl_inquiry_evpd_serial()
9527 ctsio->io_hdr.flags |= CTL_FLAG_ALLOCATED; in ctl_inquiry_evpd_serial()
9528 ctsio->be_move_done = ctl_config_move_done; in ctl_inquiry_evpd_serial()
9529 ctl_datamove((union ctl_io *)ctsio); in ctl_inquiry_evpd_serial()
9537 ctl_inquiry_evpd_eid(struct ctl_scsiio *ctsio, int alloc_len) in ctl_inquiry_evpd_eid() argument
9539 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_inquiry_evpd_eid()
9544 ctsio->kern_data_ptr = malloc(data_len, M_CTL, M_WAITOK | M_ZERO); in ctl_inquiry_evpd_eid()
9545 eid_ptr = (struct scsi_vpd_extended_inquiry_data *)ctsio->kern_data_ptr; in ctl_inquiry_evpd_eid()
9546 ctsio->kern_sg_entries = 0; in ctl_inquiry_evpd_eid()
9547 ctsio->kern_rel_offset = 0; in ctl_inquiry_evpd_eid()
9548 ctsio->kern_data_len = min(data_len, alloc_len); in ctl_inquiry_evpd_eid()
9549 ctsio->kern_total_len = ctsio->kern_data_len; in ctl_inquiry_evpd_eid()
9593 ctl_set_success(ctsio); in ctl_inquiry_evpd_eid()
9594 ctsio->io_hdr.flags |= CTL_FLAG_ALLOCATED; in ctl_inquiry_evpd_eid()
9595 ctsio->be_move_done = ctl_config_move_done; in ctl_inquiry_evpd_eid()
9596 ctl_datamove((union ctl_io *)ctsio); in ctl_inquiry_evpd_eid()
9601 ctl_inquiry_evpd_mpp(struct ctl_scsiio *ctsio, int alloc_len) in ctl_inquiry_evpd_mpp() argument
9603 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_inquiry_evpd_mpp()
9610 ctsio->kern_data_ptr = malloc(data_len, M_CTL, M_WAITOK | M_ZERO); in ctl_inquiry_evpd_mpp()
9611 mpp_ptr = (struct scsi_vpd_mode_page_policy *)ctsio->kern_data_ptr; in ctl_inquiry_evpd_mpp()
9612 ctsio->kern_rel_offset = 0; in ctl_inquiry_evpd_mpp()
9613 ctsio->kern_sg_entries = 0; in ctl_inquiry_evpd_mpp()
9614 ctsio->kern_data_len = min(data_len, alloc_len); in ctl_inquiry_evpd_mpp()
9615 ctsio->kern_total_len = ctsio->kern_data_len; in ctl_inquiry_evpd_mpp()
9632 ctl_set_success(ctsio); in ctl_inquiry_evpd_mpp()
9633 ctsio->io_hdr.flags |= CTL_FLAG_ALLOCATED; in ctl_inquiry_evpd_mpp()
9634 ctsio->be_move_done = ctl_config_move_done; in ctl_inquiry_evpd_mpp()
9635 ctl_datamove((union ctl_io *)ctsio); in ctl_inquiry_evpd_mpp()
9643 ctl_inquiry_evpd_devid(struct ctl_scsiio *ctsio, int alloc_len) in ctl_inquiry_evpd_devid() argument
9645 struct ctl_softc *softc = CTL_SOFTC(ctsio); in ctl_inquiry_evpd_devid()
9646 struct ctl_port *port = CTL_PORT(ctsio); in ctl_inquiry_evpd_devid()
9647 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_inquiry_evpd_devid()
9665 ctsio->kern_data_ptr = malloc(data_len, M_CTL, M_WAITOK | M_ZERO); in ctl_inquiry_evpd_devid()
9666 devid_ptr = (struct scsi_vpd_device_id *)ctsio->kern_data_ptr; in ctl_inquiry_evpd_devid()
9667 ctsio->kern_sg_entries = 0; in ctl_inquiry_evpd_devid()
9668 ctsio->kern_rel_offset = 0; in ctl_inquiry_evpd_devid()
9669 ctsio->kern_sg_entries = 0; in ctl_inquiry_evpd_devid()
9670 ctsio->kern_data_len = min(data_len, alloc_len); in ctl_inquiry_evpd_devid()
9671 ctsio->kern_total_len = ctsio->kern_data_len; in ctl_inquiry_evpd_devid()
9721 scsi_ulto2b(ctsio->io_hdr.nexus.targ_port, &desc->identifier[2]); in ctl_inquiry_evpd_devid()
9736 g = 2 + ctsio->io_hdr.nexus.targ_port / softc->port_cnt; in ctl_inquiry_evpd_devid()
9748 ctl_set_success(ctsio); in ctl_inquiry_evpd_devid()
9749 ctsio->io_hdr.flags |= CTL_FLAG_ALLOCATED; in ctl_inquiry_evpd_devid()
9750 ctsio->be_move_done = ctl_config_move_done; in ctl_inquiry_evpd_devid()
9751 ctl_datamove((union ctl_io *)ctsio); in ctl_inquiry_evpd_devid()
9756 ctl_inquiry_evpd_scsi_ports(struct ctl_scsiio *ctsio, int alloc_len) in ctl_inquiry_evpd_scsi_ports() argument
9758 struct ctl_softc *softc = CTL_SOFTC(ctsio); in ctl_inquiry_evpd_scsi_ports()
9759 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_inquiry_evpd_scsi_ports()
9787 ctsio->kern_data_ptr = malloc(data_len, M_CTL, M_WAITOK | M_ZERO); in ctl_inquiry_evpd_scsi_ports()
9788 sp = (struct scsi_vpd_scsi_ports *)ctsio->kern_data_ptr; in ctl_inquiry_evpd_scsi_ports()
9789 ctsio->kern_sg_entries = 0; in ctl_inquiry_evpd_scsi_ports()
9790 ctsio->kern_rel_offset = 0; in ctl_inquiry_evpd_scsi_ports()
9791 ctsio->kern_sg_entries = 0; in ctl_inquiry_evpd_scsi_ports()
9792 ctsio->kern_data_len = min(data_len, alloc_len); in ctl_inquiry_evpd_scsi_ports()
9793 ctsio->kern_total_len = ctsio->kern_data_len; in ctl_inquiry_evpd_scsi_ports()
9840 ctl_set_success(ctsio); in ctl_inquiry_evpd_scsi_ports()
9841 ctsio->io_hdr.flags |= CTL_FLAG_ALLOCATED; in ctl_inquiry_evpd_scsi_ports()
9842 ctsio->be_move_done = ctl_config_move_done; in ctl_inquiry_evpd_scsi_ports()
9843 ctl_datamove((union ctl_io *)ctsio); in ctl_inquiry_evpd_scsi_ports()
9848 ctl_inquiry_evpd_sfs(struct ctl_scsiio *ctsio, int alloc_len) in ctl_inquiry_evpd_sfs() argument
9850 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_inquiry_evpd_sfs()
9855 ctsio->kern_data_ptr = malloc(sfs_page_size, M_CTL, M_WAITOK | M_ZERO); in ctl_inquiry_evpd_sfs()
9856 sfs_ptr = (struct scsi_vpd_sfs *)ctsio->kern_data_ptr; in ctl_inquiry_evpd_sfs()
9857 ctsio->kern_sg_entries = 0; in ctl_inquiry_evpd_sfs()
9858 ctsio->kern_rel_offset = 0; in ctl_inquiry_evpd_sfs()
9859 ctsio->kern_sg_entries = 0; in ctl_inquiry_evpd_sfs()
9860 ctsio->kern_data_len = min(sfs_page_size, alloc_len); in ctl_inquiry_evpd_sfs()
9861 ctsio->kern_total_len = ctsio->kern_data_len; in ctl_inquiry_evpd_sfs()
9892 ctl_set_success(ctsio); in ctl_inquiry_evpd_sfs()
9893 ctsio->io_hdr.flags |= CTL_FLAG_ALLOCATED; in ctl_inquiry_evpd_sfs()
9894 ctsio->be_move_done = ctl_config_move_done; in ctl_inquiry_evpd_sfs()
9895 ctl_datamove((union ctl_io *)ctsio); in ctl_inquiry_evpd_sfs()
9900 ctl_inquiry_evpd_block_limits(struct ctl_scsiio *ctsio, int alloc_len) in ctl_inquiry_evpd_block_limits() argument
9902 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_inquiry_evpd_block_limits()
9907 ctsio->kern_data_ptr = malloc(sizeof(*bl_ptr), M_CTL, M_WAITOK | M_ZERO); in ctl_inquiry_evpd_block_limits()
9908 bl_ptr = (struct scsi_vpd_block_limits *)ctsio->kern_data_ptr; in ctl_inquiry_evpd_block_limits()
9909 ctsio->kern_sg_entries = 0; in ctl_inquiry_evpd_block_limits()
9910 ctsio->kern_rel_offset = 0; in ctl_inquiry_evpd_block_limits()
9911 ctsio->kern_sg_entries = 0; in ctl_inquiry_evpd_block_limits()
9912 ctsio->kern_data_len = min(sizeof(*bl_ptr), alloc_len); in ctl_inquiry_evpd_block_limits()
9913 ctsio->kern_total_len = ctsio->kern_data_len; in ctl_inquiry_evpd_block_limits()
9968 ctl_set_success(ctsio); in ctl_inquiry_evpd_block_limits()
9969 ctsio->io_hdr.flags |= CTL_FLAG_ALLOCATED; in ctl_inquiry_evpd_block_limits()
9970 ctsio->be_move_done = ctl_config_move_done; in ctl_inquiry_evpd_block_limits()
9971 ctl_datamove((union ctl_io *)ctsio); in ctl_inquiry_evpd_block_limits()
9976 ctl_inquiry_evpd_bdc(struct ctl_scsiio *ctsio, int alloc_len) in ctl_inquiry_evpd_bdc() argument
9978 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_inquiry_evpd_bdc()
9983 ctsio->kern_data_ptr = malloc(sizeof(*bdc_ptr), M_CTL, M_WAITOK | M_ZERO); in ctl_inquiry_evpd_bdc()
9984 bdc_ptr = (struct scsi_vpd_block_device_characteristics *)ctsio->kern_data_ptr; in ctl_inquiry_evpd_bdc()
9985 ctsio->kern_sg_entries = 0; in ctl_inquiry_evpd_bdc()
9986 ctsio->kern_rel_offset = 0; in ctl_inquiry_evpd_bdc()
9987 ctsio->kern_data_len = min(sizeof(*bdc_ptr), alloc_len); in ctl_inquiry_evpd_bdc()
9988 ctsio->kern_total_len = ctsio->kern_data_len; in ctl_inquiry_evpd_bdc()
10016 ctl_set_success(ctsio); in ctl_inquiry_evpd_bdc()
10017 ctsio->io_hdr.flags |= CTL_FLAG_ALLOCATED; in ctl_inquiry_evpd_bdc()
10018 ctsio->be_move_done = ctl_config_move_done; in ctl_inquiry_evpd_bdc()
10019 ctl_datamove((union ctl_io *)ctsio); in ctl_inquiry_evpd_bdc()
10024 ctl_inquiry_evpd_lbp(struct ctl_scsiio *ctsio, int alloc_len) in ctl_inquiry_evpd_lbp() argument
10026 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_inquiry_evpd_lbp()
10030 ctsio->kern_data_ptr = malloc(sizeof(*lbp_ptr), M_CTL, M_WAITOK | M_ZERO); in ctl_inquiry_evpd_lbp()
10031 lbp_ptr = (struct scsi_vpd_logical_block_prov *)ctsio->kern_data_ptr; in ctl_inquiry_evpd_lbp()
10032 ctsio->kern_sg_entries = 0; in ctl_inquiry_evpd_lbp()
10033 ctsio->kern_rel_offset = 0; in ctl_inquiry_evpd_lbp()
10034 ctsio->kern_data_len = min(sizeof(*lbp_ptr), alloc_len); in ctl_inquiry_evpd_lbp()
10035 ctsio->kern_total_len = ctsio->kern_data_len; in ctl_inquiry_evpd_lbp()
10065 ctl_set_success(ctsio); in ctl_inquiry_evpd_lbp()
10066 ctsio->io_hdr.flags |= CTL_FLAG_ALLOCATED; in ctl_inquiry_evpd_lbp()
10067 ctsio->be_move_done = ctl_config_move_done; in ctl_inquiry_evpd_lbp()
10068 ctl_datamove((union ctl_io *)ctsio); in ctl_inquiry_evpd_lbp()
10076 ctl_inquiry_evpd(struct ctl_scsiio *ctsio) in ctl_inquiry_evpd() argument
10078 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_inquiry_evpd()
10082 cdb = (struct scsi_inquiry *)ctsio->cdb; in ctl_inquiry_evpd()
10087 retval = ctl_inquiry_evpd_supported(ctsio, alloc_len); in ctl_inquiry_evpd()
10090 retval = ctl_inquiry_evpd_serial(ctsio, alloc_len); in ctl_inquiry_evpd()
10093 retval = ctl_inquiry_evpd_devid(ctsio, alloc_len); in ctl_inquiry_evpd()
10096 retval = ctl_inquiry_evpd_eid(ctsio, alloc_len); in ctl_inquiry_evpd()
10099 retval = ctl_inquiry_evpd_mpp(ctsio, alloc_len); in ctl_inquiry_evpd()
10102 retval = ctl_inquiry_evpd_scsi_ports(ctsio, alloc_len); in ctl_inquiry_evpd()
10105 retval = ctl_inquiry_evpd_tpc(ctsio, alloc_len); in ctl_inquiry_evpd()
10108 retval = ctl_inquiry_evpd_sfs(ctsio, alloc_len); in ctl_inquiry_evpd()
10113 retval = ctl_inquiry_evpd_block_limits(ctsio, alloc_len); in ctl_inquiry_evpd()
10118 retval = ctl_inquiry_evpd_bdc(ctsio, alloc_len); in ctl_inquiry_evpd()
10123 retval = ctl_inquiry_evpd_lbp(ctsio, alloc_len); in ctl_inquiry_evpd()
10127 ctl_set_invalid_field(ctsio, in ctl_inquiry_evpd()
10133 ctl_done((union ctl_io *)ctsio); in ctl_inquiry_evpd()
10145 ctl_inquiry_std(struct ctl_scsiio *ctsio) in ctl_inquiry_std() argument
10147 struct ctl_softc *softc = CTL_SOFTC(ctsio); in ctl_inquiry_std()
10148 struct ctl_port *port = CTL_PORT(ctsio); in ctl_inquiry_std()
10149 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_inquiry_std()
10160 cdb = (struct scsi_inquiry *)ctsio->cdb; in ctl_inquiry_std()
10169 ctsio->kern_data_ptr = malloc(data_len, M_CTL, M_WAITOK | M_ZERO); in ctl_inquiry_std()
10170 inq_ptr = (struct scsi_inquiry_data *)ctsio->kern_data_ptr; in ctl_inquiry_std()
10171 ctsio->kern_sg_entries = 0; in ctl_inquiry_std()
10172 ctsio->kern_rel_offset = 0; in ctl_inquiry_std()
10173 ctsio->kern_data_len = min(data_len, alloc_len); in ctl_inquiry_std()
10174 ctsio->kern_total_len = ctsio->kern_data_len; in ctl_inquiry_std()
10331 ctl_set_success(ctsio); in ctl_inquiry_std()
10332 ctsio->io_hdr.flags |= CTL_FLAG_ALLOCATED; in ctl_inquiry_std()
10333 ctsio->be_move_done = ctl_config_move_done; in ctl_inquiry_std()
10334 ctl_datamove((union ctl_io *)ctsio); in ctl_inquiry_std()
10339 ctl_inquiry(struct ctl_scsiio *ctsio) in ctl_inquiry() argument
10346 cdb = (struct scsi_inquiry *)ctsio->cdb; in ctl_inquiry()
10348 retval = ctl_inquiry_evpd(ctsio); in ctl_inquiry()
10350 retval = ctl_inquiry_std(ctsio); in ctl_inquiry()
10352 ctl_set_invalid_field(ctsio, in ctl_inquiry()
10358 ctl_done((union ctl_io *)ctsio); in ctl_inquiry()
10366 ctl_get_config(struct ctl_scsiio *ctsio) in ctl_get_config() argument
10368 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_get_config()
10375 cdb = (struct scsi_get_config *)ctsio->cdb; in ctl_get_config()
10393 ctsio->kern_data_ptr = malloc(data_len, M_CTL, M_WAITOK | M_ZERO); in ctl_get_config()
10394 ctsio->kern_sg_entries = 0; in ctl_get_config()
10395 ctsio->kern_rel_offset = 0; in ctl_get_config()
10397 hdr = (struct scsi_get_config_header *)ctsio->kern_data_ptr; in ctl_get_config()
10562 ctsio->kern_data_len = min(data_len, alloc_len); in ctl_get_config()
10563 ctsio->kern_total_len = ctsio->kern_data_len; in ctl_get_config()
10565 ctl_set_success(ctsio); in ctl_get_config()
10566 ctsio->io_hdr.flags |= CTL_FLAG_ALLOCATED; in ctl_get_config()
10567 ctsio->be_move_done = ctl_config_move_done; in ctl_get_config()
10568 ctl_datamove((union ctl_io *)ctsio); in ctl_get_config()
10573 ctl_get_event_status(struct ctl_scsiio *ctsio) in ctl_get_event_status() argument
10579 cdb = (struct scsi_get_event_status *)ctsio->cdb; in ctl_get_event_status()
10581 ctl_set_invalid_field(ctsio, /*sks_valid*/ 1, /*command*/ 1, in ctl_get_event_status()
10583 ctl_done((union ctl_io *)ctsio); in ctl_get_event_status()
10589 ctsio->kern_data_ptr = malloc(data_len, M_CTL, M_WAITOK | M_ZERO); in ctl_get_event_status()
10590 ctsio->kern_sg_entries = 0; in ctl_get_event_status()
10591 ctsio->kern_rel_offset = 0; in ctl_get_event_status()
10592 ctsio->kern_data_len = min(data_len, alloc_len); in ctl_get_event_status()
10593 ctsio->kern_total_len = ctsio->kern_data_len; in ctl_get_event_status()
10595 hdr = (struct scsi_get_event_status_header *)ctsio->kern_data_ptr; in ctl_get_event_status()
10600 ctl_set_success(ctsio); in ctl_get_event_status()
10601 ctsio->io_hdr.flags |= CTL_FLAG_ALLOCATED; in ctl_get_event_status()
10602 ctsio->be_move_done = ctl_config_move_done; in ctl_get_event_status()
10603 ctl_datamove((union ctl_io *)ctsio); in ctl_get_event_status()
10608 ctl_mechanism_status(struct ctl_scsiio *ctsio) in ctl_mechanism_status() argument
10614 cdb = (struct scsi_mechanism_status *)ctsio->cdb; in ctl_mechanism_status()
10618 ctsio->kern_data_ptr = malloc(data_len, M_CTL, M_WAITOK | M_ZERO); in ctl_mechanism_status()
10619 ctsio->kern_sg_entries = 0; in ctl_mechanism_status()
10620 ctsio->kern_rel_offset = 0; in ctl_mechanism_status()
10621 ctsio->kern_data_len = min(data_len, alloc_len); in ctl_mechanism_status()
10622 ctsio->kern_total_len = ctsio->kern_data_len; in ctl_mechanism_status()
10624 hdr = (struct scsi_mechanism_status_header *)ctsio->kern_data_ptr; in ctl_mechanism_status()
10631 ctl_set_success(ctsio); in ctl_mechanism_status()
10632 ctsio->io_hdr.flags |= CTL_FLAG_ALLOCATED; in ctl_mechanism_status()
10633 ctsio->be_move_done = ctl_config_move_done; in ctl_mechanism_status()
10634 ctl_datamove((union ctl_io *)ctsio); in ctl_mechanism_status()
10650 ctl_read_toc(struct ctl_scsiio *ctsio) in ctl_read_toc() argument
10652 struct ctl_lun *lun = CTL_LUN(ctsio); in ctl_read_toc()
10659 cdb = (struct scsi_read_toc *)ctsio->cdb; in ctl_read_toc()
10669 ctsio->kern_data_ptr = malloc(data_len, M_CTL, M_WAITOK | M_ZERO); in ctl_read_toc()
10670 ctsio->kern_sg_entries = 0; in ctl_read_toc()
10671 ctsio->kern_rel_offset = 0; in ctl_read_toc()
10672 ctsio->kern_data_len = min(data_len, alloc_len); in ctl_read_toc()
10673 ctsio->kern_total_len = ctsio->kern_data_len; in ctl_read_toc()
10675 hdr = (struct scsi_read_toc_hdr *)ctsio->kern_data_ptr; in ctl_read_toc()
10707 ctl_set_success(ctsio); in ctl_read_toc()
10708 ctsio->io_hdr.flags |= CTL_FLAG_ALLOCATED; in ctl_read_toc()
10709 ctsio->be_move_done = ctl_config_move_done; in ctl_read_toc()
10710 ctl_datamove((union ctl_io *)ctsio); in ctl_read_toc()
12053 const struct ctl_cmd_entry *entry, struct ctl_scsiio *ctsio) in ctl_scsiio_lun_check() argument
12070 ctl_set_lun_unavail(ctsio); in ctl_scsiio_lun_check()
12076 ctl_set_lun_transit(ctsio); in ctl_scsiio_lun_check()
12082 ctl_set_lun_standby(ctsio); in ctl_scsiio_lun_check()
12094 ctl_set_hw_write_protected(ctsio); in ctl_scsiio_lun_check()
12099 ctl_set_sense(ctsio, /*current_error*/ 1, in ctl_scsiio_lun_check()
12112 residx = ctl_get_initindex(&ctsio->io_hdr.nexus); in ctl_scsiio_lun_check()
12116 ctl_set_reservation_conflict(ctsio); in ctl_scsiio_lun_check()
12138 ctl_set_reservation_conflict(ctsio); in ctl_scsiio_lun_check()
12146 ctl_set_lun_ejected(ctsio); in ctl_scsiio_lun_check()
12149 ctl_set_lun_no_media(ctsio); in ctl_scsiio_lun_check()
12151 ctl_set_lun_int_reqd(ctsio); in ctl_scsiio_lun_check()
12153 ctl_set_lun_stopped(ctsio); in ctl_scsiio_lun_check()
12256 ctl_scsiio_precheck(struct ctl_scsiio *ctsio) in ctl_scsiio_precheck() argument
12258 struct ctl_softc *softc = CTL_SOFTC(ctsio); in ctl_scsiio_precheck()
12265 targ_lun = ctsio->io_hdr.nexus.targ_mapped_lun; in ctl_scsiio_precheck()
12280 CTL_LUN(ctsio) = lun; in ctl_scsiio_precheck()
12282 CTL_BACKEND_LUN(ctsio) = lun->be_lun; in ctl_scsiio_precheck()
12292 LIST_INSERT_HEAD(&lun->ooa_queue, &ctsio->io_hdr, ooa_links); in ctl_scsiio_precheck()
12296 entry = ctl_validate_command(ctsio); in ctl_scsiio_precheck()
12303 ctsio->io_hdr.flags &= ~CTL_FLAG_DATA_MASK; in ctl_scsiio_precheck()
12304 ctsio->io_hdr.flags |= entry->flags & CTL_FLAG_DATA_MASK; in ctl_scsiio_precheck()
12315 ctsio->io_hdr.flags |= CTL_FLAG_IS_WAS_ON_RTR; in ctl_scsiio_precheck()
12316 ctl_enqueue_rtr((union ctl_io *)ctsio); in ctl_scsiio_precheck()
12320 ctl_set_unsupported_lun(ctsio); in ctl_scsiio_precheck()
12321 ctl_done((union ctl_io *)ctsio); in ctl_scsiio_precheck()
12331 ctl_set_invalid_opcode(ctsio); in ctl_scsiio_precheck()
12332 ctl_done((union ctl_io *)ctsio); in ctl_scsiio_precheck()
12337 initidx = ctl_get_initindex(&ctsio->io_hdr.nexus); in ctl_scsiio_precheck()
12345 if (ctsio->cdb[0] != REQUEST_SENSE) { in ctl_scsiio_precheck()
12379 ua_type = ctl_build_ua(lun, initidx, &ctsio->sense_data, in ctl_scsiio_precheck()
12383 ctsio->scsi_status = SCSI_STATUS_CHECK_COND; in ctl_scsiio_precheck()
12384 ctsio->io_hdr.status = CTL_SCSI_ERROR | CTL_AUTOSENSE; in ctl_scsiio_precheck()
12385 ctsio->sense_len = sense_len; in ctl_scsiio_precheck()
12386 ctl_done((union ctl_io *)ctsio); in ctl_scsiio_precheck()
12391 if (ctl_scsiio_lun_check(lun, entry, ctsio) != 0) { in ctl_scsiio_precheck()
12393 ctl_done((union ctl_io *)ctsio); in ctl_scsiio_precheck()
12412 ctsio->io_hdr.flags |= CTL_FLAG_SENT_2OTHER_SC; in ctl_scsiio_precheck()
12413 ctsio->io_hdr.flags &= ~CTL_FLAG_IO_ACTIVE; in ctl_scsiio_precheck()
12417 msg_info.hdr.original_sc = (union ctl_io *)ctsio; in ctl_scsiio_precheck()
12419 msg_info.hdr.nexus = ctsio->io_hdr.nexus; in ctl_scsiio_precheck()
12420 msg_info.scsi.tag_num = ctsio->tag_num; in ctl_scsiio_precheck()
12421 msg_info.scsi.tag_type = ctsio->tag_type; in ctl_scsiio_precheck()
12422 memcpy(msg_info.scsi.cdb, ctsio->cdb, CTL_MAX_CDBLEN); in ctl_scsiio_precheck()
12423 msg_info.scsi.cdb_len = ctsio->cdb_len; in ctl_scsiio_precheck()
12424 msg_info.scsi.priority = ctsio->priority; in ctl_scsiio_precheck()
12429 ctsio->io_hdr.flags &= ~CTL_FLAG_SENT_2OTHER_SC; in ctl_scsiio_precheck()
12430 ctsio->io_hdr.flags |= CTL_FLAG_IO_ACTIVE; in ctl_scsiio_precheck()
12431 ctl_set_busy(ctsio); in ctl_scsiio_precheck()
12432 ctl_done((union ctl_io *)ctsio); in ctl_scsiio_precheck()
12438 bio = (union ctl_io *)LIST_NEXT(&ctsio->io_hdr, ooa_links); in ctl_scsiio_precheck()
12439 switch (ctl_check_ooa(lun, (union ctl_io *)ctsio, &bio)) { in ctl_scsiio_precheck()
12442 ctsio->io_hdr.flags |= CTL_FLAG_IS_WAS_ON_RTR; in ctl_scsiio_precheck()
12444 ctl_enqueue_rtr((union ctl_io *)ctsio); in ctl_scsiio_precheck()
12447 ctsio->io_hdr.blocker = bio; in ctl_scsiio_precheck()
12448 TAILQ_INSERT_TAIL(&bio->io_hdr.blocked_queue, &ctsio->io_hdr, in ctl_scsiio_precheck()
12454 ctl_set_overlapped_cmd(ctsio); in ctl_scsiio_precheck()
12455 ctl_done((union ctl_io *)ctsio); in ctl_scsiio_precheck()
12459 ctl_set_overlapped_tag(ctsio, ctsio->tag_num & 0xff); in ctl_scsiio_precheck()
12460 ctl_done((union ctl_io *)ctsio); in ctl_scsiio_precheck()
12468 ctl_get_cmd_entry(struct ctl_scsiio *ctsio, int *sa) in ctl_get_cmd_entry() argument
12473 entry = &ctl_cmd_table[ctsio->cdb[0]]; in ctl_get_cmd_entry()
12477 service_action = ctsio->cdb[1] & SERVICE_ACTION_MASK; in ctl_get_cmd_entry()
12485 ctl_validate_command(struct ctl_scsiio *ctsio) in ctl_validate_command() argument
12491 entry = ctl_get_cmd_entry(ctsio, &sa); in ctl_validate_command()
12492 ctsio->seridx = entry->seridx; in ctl_validate_command()
12495 ctl_set_invalid_field(ctsio, in ctl_validate_command()
12502 ctl_set_invalid_opcode(ctsio); in ctl_validate_command()
12503 ctl_done((union ctl_io *)ctsio); in ctl_validate_command()
12508 ctsio->cdb[0], ctsio->cdb[1])); in ctl_validate_command()
12510 diff = ctsio->cdb[i] & ~entry->usage[i - 1]; in ctl_validate_command()
12513 ctl_set_invalid_field(ctsio, in ctl_validate_command()
12519 ctl_done((union ctl_io *)ctsio); in ctl_validate_command()
12549 ctl_scsiio(struct ctl_scsiio *ctsio) in ctl_scsiio() argument
12556 CTL_DEBUG_PRINT(("ctl_scsiio cdb[0]=%02X\n", ctsio->cdb[0])); in ctl_scsiio()
12558 entry = ctl_get_cmd_entry(ctsio, NULL); in ctl_scsiio()
12564 if (ctsio->io_hdr.flags & CTL_FLAG_ABORT) { in ctl_scsiio()
12565 ctl_done((union ctl_io *)ctsio); in ctl_scsiio()
12573 retval = entry->execute(ctsio); in ctl_scsiio()
13137 ctl_cmd_pattern_match(struct ctl_scsiio *ctsio, struct ctl_error_desc *desc) argument
13155 entry = ctl_get_cmd_entry(ctsio, NULL);
13181 retval = ctl_get_lba_len((union ctl_io *)ctsio, &lba1, &len1);