vd_scsi
vd_scsi_t *vd_scsi;
vd_scsi = kmem_zalloc(vd_scsi_len, KM_SLEEP);
vd_scsi->cdb_len = cdb_len;
vd_scsi->sense_len = sense_len;
vd_scsi->datain_len = datain_len;
vd_scsi->dataout_len = dataout_len;
return (vd_scsi);
vdc_scsi_status(vdc_t *vdc, vd_scsi_t *vd_scsi, boolean_t log_error)
if (vd_scsi->cmd_status == STATUS_GOOD)
GETCMD(VD_SCSI_DATA_CDB(vd_scsi)));
switch (vd_scsi->cmd_status) {
if (vd_scsi->sense_len == 0 ||
vd_scsi->sense_status != STATUS_GOOD) {
sense = VD_SCSI_DATA_SENSE(vd_scsi);
cdb = VD_SCSI_DATA_CDB(vd_scsi);
vd_scsi->cmd_status);
vd_scsi->cmd_status);
vd_scsi_t *vd_scsi;
vd_scsi = vdc_scsi_alloc(cdb_len, sense_len, datain_len, dataout_len,
vd_scsi->options |= VD_SCSI_OPT_NORETRY;
vd_scsi->task_attribute = 0;
vd_scsi->task_attribute = VD_SCSI_TASK_ACA;
vd_scsi->task_attribute = VD_SCSI_TASK_HQUEUE;
vd_scsi->task_attribute = VD_SCSI_TASK_ORDERED;
vd_scsi->task_attribute = 0;
vd_scsi->timeout = uscsi.uscsi_timeout;
cdb = VD_SCSI_DATA_CDB(vd_scsi);
sense = VD_SCSI_DATA_SENSE(vd_scsi);
datain = (char *)VD_SCSI_DATA_IN(vd_scsi);
dataout = (char *)VD_SCSI_DATA_OUT(vd_scsi);
rv = vdc_do_sync_op(vdc, VD_OP_SCSICMD, (caddr_t)vd_scsi, vd_scsi_len,
uscsi.uscsi_status = vd_scsi->cmd_status;
uscsi.uscsi_rqstatus = vd_scsi->sense_status;
vd_scsi->sense_len;
vd_scsi->sense_len, mode) != 0) {
vd_scsi->datain_len;
vd_scsi->datain_len, mode) != 0) {
vd_scsi->dataout_len;
rv = vdc_scsi_status(vdc, vd_scsi,
kmem_free(vd_scsi, vd_scsi_len);
vd_scsi_t *vd_scsi;
vd_scsi = vdc_scsi_alloc(cdb_len, sense_len, datain_len, dataout_len,
cdb = VD_SCSI_DATA_CDB(vd_scsi);
vd_scsi->timeout = vdc_scsi_timeout;
return (vd_scsi);
vd_scsi_t *vd_scsi;
vd_scsi = vdc_scsi_alloc(cdb_len, sense_len, datain_len, dataout_len,
cdb = VD_SCSI_DATA_CDB(vd_scsi);
vd_scsi->timeout = vdc_scsi_timeout;
return (vd_scsi);
vd_scsi_t *vd_scsi;
vd_scsi = vdc_scsi_alloc_persistent_in(SD_READ_KEYS,
scsi_keys = (sd_prin_readkeys_t *)VD_SCSI_DATA_IN(vd_scsi);
rv = vdc_do_sync_op(vdc, VD_OP_SCSICMD, (caddr_t)vd_scsi, vd_scsi_len,
rv = vdc_scsi_status(vdc, vd_scsi, B_FALSE);
kmem_free(vd_scsi, vd_scsi_len);
vd_scsi_t *vd_scsi;
vd_scsi = vdc_scsi_alloc_persistent_in(SD_READ_RESV,
scsi_resv = (sd_prin_readresv_t *)VD_SCSI_DATA_IN(vd_scsi);
rv = vdc_do_sync_op(vdc, VD_OP_SCSICMD, (caddr_t)vd_scsi, vd_scsi_len,
rv = vdc_scsi_status(vdc, vd_scsi, B_FALSE);
kmem_free(vd_scsi, vd_scsi_len);
vd_scsi_t *vd_scsi;
vd_scsi = vdc_scsi_alloc_persistent_out(SD_SCSI3_REGISTER,
scsi_prout = (sd_prout_t *)VD_SCSI_DATA_OUT(vd_scsi);
rv = vdc_do_sync_op(vdc, VD_OP_SCSICMD, (caddr_t)vd_scsi, vd_scsi_len,
rv = vdc_scsi_status(vdc, vd_scsi, B_FALSE);
kmem_free(vd_scsi, vd_scsi_len);
vd_scsi_t *vd_scsi;
vd_scsi = vdc_scsi_alloc_persistent_out(SD_SCSI3_RESERVE,
cdb = VD_SCSI_DATA_CDB(vd_scsi);
scsi_prout = (sd_prout_t *)VD_SCSI_DATA_OUT(vd_scsi);
rv = vdc_do_sync_op(vdc, VD_OP_SCSICMD, (caddr_t)vd_scsi, vd_scsi_len,
rv = vdc_scsi_status(vdc, vd_scsi, B_FALSE);
kmem_free(vd_scsi, vd_scsi_len);
vd_scsi_t *vd_scsi;
vd_scsi = vdc_scsi_alloc_persistent_out(SD_SCSI3_PREEMPTANDABORT,
vd_scsi->task_attribute = VD_SCSI_TASK_ACA;
cdb = VD_SCSI_DATA_CDB(vd_scsi);
scsi_prout = (sd_prout_t *)VD_SCSI_DATA_OUT(vd_scsi);
rv = vdc_do_sync_op(vdc, VD_OP_SCSICMD, (caddr_t)vd_scsi, vd_scsi_len,
rv = vdc_scsi_status(vdc, vd_scsi, B_FALSE);
kmem_free(vd_scsi, vd_scsi_len);
vd_scsi_t *vd_scsi;
vd_scsi = vdc_scsi_alloc_persistent_out(SD_SCSI3_REGISTERANDIGNOREKEY,
scsi_prout = (sd_prout_t *)VD_SCSI_DATA_OUT(vd_scsi);
rv = vdc_do_sync_op(vdc, VD_OP_SCSICMD, (caddr_t)vd_scsi, vd_scsi_len,
rv = vdc_scsi_status(vdc, vd_scsi, B_FALSE);
kmem_free(vd_scsi, vd_scsi_len);
vd_scsi_t *vd_scsi;
vd_scsi = vdc_scsi_alloc(cdb_len, sense_len, 0, 0, &vd_scsi_len);
cdb = VD_SCSI_DATA_CDB(vd_scsi);
vd_scsi->timeout = vdc_scsi_timeout;
rv = vdc_do_op(vdc, VD_OP_SCSICMD, (caddr_t)vd_scsi, vd_scsi_len,
rv = vdc_scsi_status(vdc, vd_scsi, B_FALSE);
kmem_free(vd_scsi, vd_scsi_len);
vd_scsi_t *vd_scsi = (vd_scsi_t *)vd_buf;
vd_scsi_len += P2ROUNDUP(vd_scsi->cdb_len, sizeof (uint64_t));
vd_scsi_len += P2ROUNDUP(vd_scsi->sense_len, sizeof (uint64_t));
vd_scsi_len += P2ROUNDUP(vd_scsi->datain_len, sizeof (uint64_t));
vd_scsi_len += P2ROUNDUP(vd_scsi->dataout_len, sizeof (uint64_t));
if (vd_scsi->options & VD_SCSI_OPT_NORETRY) {
switch (vd_scsi->task_attribute) {
uscsi->uscsi_timeout = vd_scsi->timeout;
uscsi->uscsi_cdb = (caddr_t)VD_SCSI_DATA_CDB(vd_scsi);
uscsi->uscsi_cdblen = vd_scsi->cdb_len;
if (vd_scsi->sense_len != 0) {
uscsi->uscsi_rqbuf = (caddr_t)VD_SCSI_DATA_SENSE(vd_scsi);
uscsi->uscsi_rqlen = vd_scsi->sense_len;
if (vd_scsi->datain_len != 0 && vd_scsi->dataout_len != 0) {
if (vd_scsi->datain_len != 0) {
uscsi->uscsi_buflen = vd_scsi->datain_len;
uscsi->uscsi_bufaddr = (char *)VD_SCSI_DATA_IN(vd_scsi);
if (vd_scsi->dataout_len != 0) {
uscsi->uscsi_buflen = vd_scsi->dataout_len;
uscsi->uscsi_bufaddr = (char *)VD_SCSI_DATA_OUT(vd_scsi);
vd_scsi_t *vd_scsi = (vd_scsi_t *)vd_buf;
vd_scsi->cmd_status = uscsi->uscsi_status;
vd_scsi->sense_status = uscsi->uscsi_rqstatus;
vd_scsi->sense_len -= uscsi->uscsi_rqresid;
vd_scsi->sense_len = 0;
vd_scsi->sense_len = 0;
vd_scsi->dataout_len = 0;
vd_scsi->datain_len = 0;
vd_scsi->datain_len -= uscsi->uscsi_resid;
vd_scsi->dataout_len = 0;
vd_scsi->datain_len = 0;
vd_scsi->dataout_len -= uscsi->uscsi_resid;