Lines Matching refs:spx

117 #define	SATAATAPITRACE(spx, count)	if (sata_atapi_trace_save) \
118 sata_save_atapi_trace(spx, count);
122 #define SATAATAPITRACE(spx, count)
1704 sata_pkt_txlate_t *spx;
1725 spx = kmem_zalloc(sizeof (sata_pkt_txlate_t), KM_SLEEP);
1726 spx->txlt_sata_hba_inst = sata_hba_inst;
1727 spx->txlt_scsi_pkt = NULL; /* No scsi pkt involved */
1728 spkt = sata_pkt_alloc(spx, NULL);
1730 kmem_free(spx, sizeof (sata_pkt_txlate_t));
1738 if (sata_ncq_err_ret_cmd_setup(spx, sdinfo) == SATA_SUCCESS) {
1739 if (sata_check_for_dma_error(dip, spx)) {
1749 if (sata_atapi_err_ret_cmd_setup(spx, sdinfo) == SATA_SUCCESS) {
1750 if (sata_check_for_dma_error(dip, spx)) {
1763 sata_pkt_free(spx);
1764 kmem_free(spx, sizeof (sata_pkt_txlate_t));
1781 sata_pkt_txlate_t *spx =
1786 sata_free_local_buffer(spx);
1787 sata_pkt_free(spx);
1788 kmem_free(spx, sizeof (sata_pkt_txlate_t));
1809 sata_pkt_txlate_t *spx;
1826 spx = kmem_zalloc(sizeof (sata_pkt_txlate_t), KM_SLEEP);
1827 spx->txlt_sata_hba_inst = sata_hba_inst;
1828 spx->txlt_scsi_pkt = NULL; /* No scsi pkt involved */
1829 spkt = sata_pkt_alloc(spx, SLEEP_FUNC);
1831 kmem_free(spx, sizeof (sata_pkt_txlate_t));
1889 sata_pkt_txlate_t *spx =
1893 sata_pkt_free(spx);
1894 kmem_free(spx, sizeof (sata_pkt_txlate_t));
2250 sata_pkt_txlate_t *spx;
2288 spx = (sata_pkt_txlate_t *)pkt->pkt_ha_private;
2289 bzero(spx, sizeof (sata_pkt_txlate_t));
2291 spx->txlt_scsi_pkt = pkt;
2292 spx->txlt_sata_hba_inst = sata_hba_inst;
2295 spx->txlt_sata_pkt = sata_pkt_alloc(spx, callback);
2296 if (spx->txlt_sata_pkt == NULL) {
2302 spx->txlt_sata_pkt->satapkt_device.satadev_addr =
2304 spx->txlt_sata_pkt->satapkt_device.satadev_rev =
2310 spx->txlt_total_residue = bp->b_bcount;
2316 spx = (sata_pkt_txlate_t *)pkt->pkt_ha_private;
2322 /* Pkt is available already: spx->txlt_scsi_pkt == pkt; */
2325 spx->txlt_sata_pkt->satapkt_cmd.satacmd_bp = bp;
2335 sdinfo = sata_get_device_info(spx->txlt_sata_hba_inst,
2336 &spx->txlt_sata_pkt->satapkt_device);
2339 SATA_DMA_ATTR(spx->txlt_sata_hba_inst), &cur_dma_attr);
2350 if ((rval = sata_dma_buf_setup(spx, flags, callback, arg,
2378 if (sata_check_for_dma_error(dip, spx)) {
2386 pkt->pkt_resid = spx->txlt_total_residue;
2407 spx->txlt_sata_pkt->satapkt_cmd.satacmd_bp = NULL;
2408 sata_pkt_free(spx);
2464 sata_pkt_txlate_t *spx = (sata_pkt_txlate_t *)pkt->pkt_ha_private;
2465 sata_device_t *sdevice = &spx->txlt_sata_pkt->satapkt_device;
2475 ASSERT(spx != NULL &&
2476 spx->txlt_scsi_pkt == pkt && spx->txlt_sata_pkt != NULL);
2527 if (taskq_dispatch(SATA_TXLT_TASKQ(spx),
2528 (task_func_t *)spx->txlt_scsi_pkt->pkt_comp,
2529 (void *)spx->txlt_scsi_pkt, TQ_NOSLEEP) ==
2533 } else if (taskq_dispatch(SATA_TXLT_TASKQ(spx),
2534 (task_func_t *)spx->txlt_scsi_pkt->pkt_comp,
2535 (void *)spx->txlt_scsi_pkt, TQ_SLEEP) == NULL) {
2547 rval = sata_txlt_atapi(spx);
2564 return (sata_txlt_check_condition(spx, KEY_NOT_READY,
2570 bp = spx->txlt_sata_pkt->satapkt_cmd.satacmd_bp;
2578 rval = sata_txlt_inquiry(spx);
2586 rval = sata_txlt_test_unit_ready(spx);
2591 rval = sata_txlt_start_stop_unit(spx);
2597 rval = sata_txlt_read_capacity(spx);
2603 rval = sata_txlt_read_capacity16(spx);
2612 rval = sata_txlt_request_sense(spx);
2618 rval = sata_txlt_log_sense(spx);
2624 rval = sata_txlt_log_select(spx);
2631 rval = sata_txlt_mode_sense(spx);
2639 rval = sata_txlt_mode_select(spx);
2644 rval = sata_txlt_synchronize_cache(spx);
2651 rval = sata_txlt_read(spx);
2656 rval = sata_txlt_write_buffer(spx);
2663 rval = sata_txlt_write(spx);
2667 rval = sata_txlt_nodata_cmd_immediate(spx);
2674 rval = sata_txlt_ata_pass_thru(spx);
2682 rval = sata_txlt_unmap(spx);
2685 rval = sata_txlt_invalid_command(spx);
3085 sata_pkt_txlate_t *spx;
3087 spx = (sata_pkt_txlate_t *)pkt->pkt_ha_private;
3089 sata_common_free_dma_rsrcs(spx);
3091 spx->txlt_sata_pkt->satapkt_cmd.satacmd_bp = NULL;
3092 sata_pkt_free(spx);
3108 sata_pkt_txlate_t *spx;
3111 spx = (sata_pkt_txlate_t *)pkt->pkt_ha_private;
3113 sata_common_free_dma_rsrcs(spx);
3131 sata_pkt_txlate_t *spx = (sata_pkt_txlate_t *)pkt->pkt_ha_private;
3135 ASSERT(spx != NULL);
3136 if (spx->txlt_buf_dma_handle != NULL) {
3137 direction = spx->txlt_sata_pkt->
3139 if (spx->txlt_sata_pkt != NULL &&
3141 if (spx->txlt_tmp_buf != NULL) {
3143 bp = spx->txlt_sata_pkt->satapkt_cmd.satacmd_bp;
3147 spx->txlt_tmp_buf, bp->b_bcount);
3151 rval = ddi_dma_sync(spx->txlt_buf_dma_handle, 0, 0,
3155 if (spx->txlt_tmp_buf != NULL &&
3158 bcopy(spx->txlt_tmp_buf,
3191 sata_txlt_generic_pkt_info(sata_pkt_txlate_t *spx, int *reason, int flag)
3208 spx->txlt_scsi_pkt->pkt_reason = CMD_TRAN_ERR;
3212 switch (sata_validate_scsi_address(spx->txlt_sata_hba_inst,
3213 &spx->txlt_scsi_pkt->pkt_address, &sata_device)) {
3223 sdinfo = sata_get_device_info(spx->txlt_sata_hba_inst,
3224 &spx->txlt_sata_pkt->satapkt_device);
3229 spx->txlt_scsi_pkt->pkt_reason = CMD_INCOMPLETE;
3232 spx->txlt_sata_hba_inst,
3241 spx->txlt_scsi_pkt->pkt_reason = CMD_DEV_GONE;
3250 if (spx->txlt_scsi_pkt->pkt_comp != NULL) {
3253 if (taskq_dispatch(SATA_TXLT_TASKQ(spx),
3254 (task_func_t *)spx->txlt_scsi_pkt->pkt_comp,
3255 (void *)spx->txlt_scsi_pkt, TQ_NOSLEEP) ==
3259 } else if (taskq_dispatch(SATA_TXLT_TASKQ(spx),
3260 (task_func_t *)spx->txlt_scsi_pkt->pkt_comp,
3261 (void *)spx->txlt_scsi_pkt, TQ_SLEEP) == NULL) {
3281 if (((spx->txlt_scsi_pkt->pkt_flags & FLAG_NOINTR) != 0 || flag != 0) &&
3283 SATADBG1(SATA_DBG_INTR_CTX, spx->txlt_sata_hba_inst,
3289 sdinfo = sata_get_device_info(spx->txlt_sata_hba_inst,
3290 &spx->txlt_sata_pkt->satapkt_device);
3306 ((SATA_CPORT_EVENT_FLAGS(spx->txlt_sata_hba_inst,
3309 spx->txlt_scsi_pkt->pkt_reason = CMD_INCOMPLETE;
3311 SATADBG1(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst,
3325 spx->txlt_sata_pkt->satapkt_device.satadev_type = sdinfo->satadrv_type;
3327 spx->txlt_sata_pkt->satapkt_cmd.satacmd_flags = sata_initial_cmd_flags;
3328 if ((SATA_CPORT_INFO(spx->txlt_sata_hba_inst,
3331 spx->txlt_sata_pkt->satapkt_cmd.satacmd_flags.
3339 spx->txlt_scsi_pkt->pkt_reason = CMD_CMPLT;
3342 if ((spx->txlt_scsi_pkt->pkt_flags & FLAG_NOINTR) != 0) {
3344 spx->txlt_sata_pkt->satapkt_op_mode = SATA_OPMODE_SYNCH |
3346 spx->txlt_sata_pkt->satapkt_cmd.satacmd_flags.
3350 spx->txlt_sata_pkt->satapkt_op_mode = SATA_OPMODE_ASYNCH |
3354 if (spx->txlt_scsi_pkt->pkt_flags & FLAG_STAG)
3355 spx->txlt_sata_pkt->satapkt_cmd.satacmd_flags.sata_queue_stag =
3357 else if (spx->txlt_scsi_pkt->pkt_flags &
3359 spx->txlt_sata_pkt->satapkt_cmd.satacmd_flags.sata_queue_otag =
3363 if (spx->txlt_scsi_pkt->pkt_time == 0)
3364 spx->txlt_sata_pkt->satapkt_time = sata_default_pkt_time;
3367 spx->txlt_sata_pkt->satapkt_time =
3368 spx->txlt_scsi_pkt->pkt_time;
3458 sata_txlt_invalid_command(sata_pkt_txlate_t *spx)
3460 struct scsi_pkt *scsipkt = spx->txlt_scsi_pkt;
3469 sense = sata_arq_sense(spx);
3473 SATADBG1(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst,
3480 if (taskq_dispatch(SATA_TXLT_TASKQ(spx),
3481 (task_func_t *)spx->txlt_scsi_pkt->pkt_comp,
3482 (void *)spx->txlt_scsi_pkt, TQ_NOSLEEP) == NULL) {
3485 } else if (taskq_dispatch(SATA_TXLT_TASKQ(spx),
3486 (task_func_t *)spx->txlt_scsi_pkt->pkt_comp,
3487 (void *)spx->txlt_scsi_pkt, TQ_SLEEP) == NULL) {
3502 sata_txlt_check_condition(sata_pkt_txlate_t *spx, uchar_t key, uchar_t code)
3504 sata_hba_inst_t *shi = SATA_TXLT_HBA_INST(spx);
3505 int cport = SATA_TXLT_CPORT(spx);
3506 struct scsi_pkt *scsipkt = spx->txlt_scsi_pkt;
3516 sense = sata_arq_sense(spx);
3522 SATADBG1(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst,
3529 if (taskq_dispatch(SATA_TXLT_TASKQ(spx),
3530 (task_func_t *)spx->txlt_scsi_pkt->pkt_comp,
3531 (void *)spx->txlt_scsi_pkt, TQ_NOSLEEP) == NULL) {
3534 } else if (taskq_dispatch(SATA_TXLT_TASKQ(spx),
3535 (task_func_t *)spx->txlt_scsi_pkt->pkt_comp,
3536 (void *)spx->txlt_scsi_pkt, TQ_SLEEP) == NULL) {
3551 sata_txlt_nodata_cmd_immediate(sata_pkt_txlate_t *spx)
3555 kmutex_t *cport_mutex = &(SATA_TXLT_CPORT_MUTEX(spx));
3559 if (((rval = sata_txlt_generic_pkt_info(spx, &reason, 0)) !=
3566 spx->txlt_scsi_pkt->pkt_state = STATE_GOT_BUS | STATE_GOT_TARGET |
3568 spx->txlt_scsi_pkt->pkt_reason = CMD_CMPLT;
3569 *(spx->txlt_scsi_pkt->pkt_scbp) = STATUS_GOOD;
3571 SATADBG1(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst,
3573 spx->txlt_scsi_pkt->pkt_reason);
3575 if ((spx->txlt_scsi_pkt->pkt_flags & FLAG_NOINTR) == 0 &&
3576 spx->txlt_scsi_pkt->pkt_comp != NULL) {
3579 if (taskq_dispatch(SATA_TXLT_TASKQ(spx),
3580 (task_func_t *)spx->txlt_scsi_pkt->pkt_comp,
3581 (void *)spx->txlt_scsi_pkt, TQ_NOSLEEP) == NULL) {
3584 } else if (taskq_dispatch(SATA_TXLT_TASKQ(spx),
3585 (task_func_t *)spx->txlt_scsi_pkt->pkt_comp,
3586 (void *)spx->txlt_scsi_pkt, TQ_SLEEP) == NULL) {
3620 sata_txlt_inquiry(sata_pkt_txlate_t *spx)
3622 struct scsi_pkt *scsipkt = spx->txlt_scsi_pkt;
3623 struct buf *bp = spx->txlt_sata_pkt->satapkt_cmd.satacmd_bp;
3632 kmutex_t *cport_mutex = &(SATA_TXLT_CPORT_MUTEX(spx));
3636 if (((rval = sata_txlt_generic_pkt_info(spx, &reason, 0)) !=
3642 sdinfo = sata_get_device_info(spx->txlt_sata_hba_inst,
3643 &spx->txlt_sata_pkt->satapkt_device);
3654 sense = sata_arq_sense(spx);
3678 sata_identdev_to_inquiry(spx->txlt_sata_hba_inst,
3861 spx->txlt_sata_hba_inst, sdinfo) ==
3884 sense = sata_arq_sense(spx);
3898 SATADBG1(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst,
3906 if (taskq_dispatch(SATA_TXLT_TASKQ(spx),
3907 (task_func_t *)spx->txlt_scsi_pkt->pkt_comp,
3908 (void *)spx->txlt_scsi_pkt, TQ_NOSLEEP) == NULL) {
3911 } else if (taskq_dispatch(SATA_TXLT_TASKQ(spx),
3912 (task_func_t *)spx->txlt_scsi_pkt->pkt_comp,
3913 (void *)spx->txlt_scsi_pkt, TQ_SLEEP) == NULL) {
3935 sata_txlt_request_sense(sata_pkt_txlate_t *spx)
3937 struct scsi_pkt *scsipkt = spx->txlt_scsi_pkt;
3939 struct buf *bp = spx->txlt_sata_pkt->satapkt_cmd.satacmd_bp;
3941 sata_cmd_t *scmd = &spx->txlt_sata_pkt->satapkt_cmd;
3945 cport_mutex = &(SATA_TXLT_CPORT_MUTEX(spx));
3948 if (((rval = sata_txlt_generic_pkt_info(spx, &reason, 1)) !=
3965 return (sata_txlt_check_condition(spx, KEY_ILLEGAL_REQUEST,
3969 sdinfo = sata_get_device_info(spx->txlt_sata_hba_inst,
3970 &spx->txlt_sata_pkt->satapkt_device);
3973 spx->txlt_sata_pkt->satapkt_op_mode |= SATA_OPMODE_SYNCH;
3978 if (sata_hba_start(spx, &rval) != 0) {
3984 return (sata_txlt_check_condition(spx, KEY_NO_SENSE,
4048 SATADBG1(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst,
4056 if (taskq_dispatch(SATA_TXLT_TASKQ(spx),
4057 (task_func_t *)spx->txlt_scsi_pkt->pkt_comp,
4058 (void *)spx->txlt_scsi_pkt, TQ_NOSLEEP) == NULL) {
4061 } else if (taskq_dispatch(SATA_TXLT_TASKQ(spx),
4062 (task_func_t *)spx->txlt_scsi_pkt->pkt_comp,
4063 (void *)spx->txlt_scsi_pkt, TQ_SLEEP) == NULL) {
4079 sata_txlt_test_unit_ready(sata_pkt_txlate_t *spx)
4081 struct scsi_pkt *scsipkt = spx->txlt_scsi_pkt;
4083 sata_cmd_t *scmd = &spx->txlt_sata_pkt->satapkt_cmd;
4087 kmutex_t *cport_mutex = &(SATA_TXLT_CPORT_MUTEX(spx));
4091 if (((rval = sata_txlt_generic_pkt_info(spx, &reason, 1)) !=
4097 sdinfo = sata_get_device_info(spx->txlt_sata_hba_inst,
4098 &spx->txlt_sata_pkt->satapkt_device);
4101 spx->txlt_sata_pkt->satapkt_op_mode |= SATA_OPMODE_SYNCH;
4107 if (sata_hba_start(spx, &rval) != 0) {
4114 return (sata_txlt_check_condition(spx, KEY_NOT_READY,
4126 sense = sata_arq_sense(spx);
4142 SATADBG1(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst,
4149 if (taskq_dispatch(SATA_TXLT_TASKQ(spx),
4150 (task_func_t *)spx->txlt_scsi_pkt->pkt_comp,
4151 (void *)spx->txlt_scsi_pkt, TQ_NOSLEEP) == NULL) {
4154 } else if (taskq_dispatch(SATA_TXLT_TASKQ(spx),
4155 (task_func_t *)spx->txlt_scsi_pkt->pkt_comp,
4156 (void *)spx->txlt_scsi_pkt, TQ_SLEEP) == NULL) {
4190 sata_txlt_start_stop_unit(sata_pkt_txlate_t *spx)
4192 struct scsi_pkt *scsipkt = spx->txlt_scsi_pkt;
4193 sata_cmd_t *scmd = &spx->txlt_sata_pkt->satapkt_cmd;
4197 kmutex_t *cport_mutex = &(SATA_TXLT_CPORT_MUTEX(spx));
4199 SATADBG1(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst,
4204 if (((rval = sata_txlt_generic_pkt_info(spx, &reason, 1)) !=
4213 return (sata_txlt_check_condition(spx, KEY_ILLEGAL_REQUEST,
4217 spx->txlt_sata_pkt->satapkt_op_mode |= SATA_OPMODE_SYNCH;
4218 spx->txlt_sata_pkt->satapkt_comp = NULL;
4220 sdinfo = sata_get_device_info(spx->txlt_sata_hba_inst,
4221 &spx->txlt_sata_pkt->satapkt_device);
4236 if (sata_hba_start(spx, &rval) != 0) {
4249 if (sata_hba_start(spx, &rval) != 0) {
4260 if (sata_hba_start(spx, &rval) != 0) {
4273 if (sata_hba_start(spx, &rval) != 0) {
4283 if (sata_hba_start(spx, &rval) != 0) {
4298 if (sata_hba_start(spx, &rval) != 0) {
4308 if (sata_hba_start(spx, &rval) != 0) {
4332 if (sata_hba_start(spx, &rval) != 0) {
4346 if (sata_hba_start(spx, &rval) != 0) {
4356 if (sata_hba_start(spx, &rval) != 0) {
4369 if (sata_hba_start(spx, &rval) != 0) {
4382 if (sata_hba_start(spx, &rval) != 0) {
4396 if (sata_hba_start(spx, &rval) != 0) {
4412 if (sata_hba_start(spx, &rval) != 0) {
4421 if (sata_hba_start(spx, &rval) != 0) {
4437 return (sata_txlt_check_condition(spx,
4444 if (sata_hba_start(spx, &rval) != 0) {
4453 if (sata_hba_start(spx, &rval) != 0) {
4466 return (sata_txlt_check_condition(spx, KEY_ILLEGAL_REQUEST,
4475 SATADBG1(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst,
4477 spx->txlt_sata_pkt->satapkt_reason);
4481 sata_set_arq_data(spx->txlt_sata_pkt);
4483 if (taskq_dispatch(SATA_TXLT_TASKQ(spx),
4484 (task_func_t *)spx->txlt_scsi_pkt->pkt_comp,
4485 (void *)spx->txlt_scsi_pkt, TQ_NOSLEEP) == NULL) {
4488 } else if (taskq_dispatch(SATA_TXLT_TASKQ(spx),
4489 (task_func_t *)spx->txlt_scsi_pkt->pkt_comp,
4490 (void *)spx->txlt_scsi_pkt, TQ_SLEEP) == NULL) {
4497 sata_txlt_nodata_cmd_completion(spx->txlt_sata_pkt);
4514 sata_txlt_read_capacity(sata_pkt_txlate_t *spx)
4516 struct scsi_pkt *scsipkt = spx->txlt_scsi_pkt;
4517 struct buf *bp = spx->txlt_sata_pkt->satapkt_cmd.satacmd_bp;
4523 kmutex_t *cport_mutex = &(SATA_TXLT_CPORT_MUTEX(spx));
4525 SATADBG1(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst,
4530 if (((rval = sata_txlt_generic_pkt_info(spx, &reason, 0)) !=
4550 spx->txlt_sata_hba_inst,
4551 &spx->txlt_sata_pkt->satapkt_device);
4584 SATADBG1(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst, "%d\n",
4591 SATADBG1(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst,
4598 if (taskq_dispatch(SATA_TXLT_TASKQ(spx),
4599 (task_func_t *)spx->txlt_scsi_pkt->pkt_comp,
4600 (void *)spx->txlt_scsi_pkt, TQ_NOSLEEP) == NULL) {
4603 } else if (taskq_dispatch(SATA_TXLT_TASKQ(spx),
4604 (task_func_t *)spx->txlt_scsi_pkt->pkt_comp,
4605 (void *)spx->txlt_scsi_pkt, TQ_SLEEP) == NULL) {
4623 sata_txlt_read_capacity16(sata_pkt_txlate_t *spx)
4625 struct scsi_pkt *scsipkt = spx->txlt_scsi_pkt;
4626 struct buf *bp = spx->txlt_sata_pkt->satapkt_cmd.satacmd_bp;
4635 kmutex_t *cport_mutex = &(SATA_TXLT_CPORT_MUTEX(spx));
4637 SATADBG1(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst,
4642 if (((rval = sata_txlt_generic_pkt_info(spx, &reason, 0)) !=
4664 return (sata_txlt_check_condition(spx,
4679 return (sata_txlt_check_condition(spx,
4687 return (sata_txlt_check_condition(spx,
4695 spx->txlt_sata_hba_inst,
4696 &spx->txlt_sata_pkt->satapkt_device);
4764 SATADBG1(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst, "%llu\n",
4773 SATADBG1(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst,
4780 if (taskq_dispatch(SATA_TXLT_TASKQ(spx),
4781 (task_func_t *)spx->txlt_scsi_pkt->pkt_comp,
4782 (void *)spx->txlt_scsi_pkt, TQ_NOSLEEP) == NULL) {
4785 } else if (taskq_dispatch(SATA_TXLT_TASKQ(spx),
4786 (task_func_t *)spx->txlt_scsi_pkt->pkt_comp,
4787 (void *)spx->txlt_scsi_pkt, TQ_SLEEP) == NULL) {
4802 sata_txlt_unmap(sata_pkt_txlate_t *spx)
4804 struct scsi_pkt *scsipkt = spx->txlt_scsi_pkt;
4805 sata_cmd_t *scmd = &spx->txlt_sata_pkt->satapkt_cmd;
4806 struct buf *bp = spx->txlt_sata_pkt->satapkt_cmd.satacmd_bp;
4816 kmutex_t *cport_mutex = &(SATA_TXLT_CPORT_MUTEX(spx));
4819 SATADBG1(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst,
4824 sdinfo = sata_get_device_info(spx->txlt_sata_hba_inst,
4825 &spx->txlt_sata_pkt->satapkt_device);
4827 SATADBG2(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst,
4833 rval = sata_txlt_generic_pkt_info(spx, &reason, 1);
4849 SATADBG1(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst,
4852 return ((sata_txlt_check_condition(spx, KEY_ILLEGAL_REQUEST,
4862 SATADBG1(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst,
4866 return (sata_txlt_unmap_nodata_cmd(spx));
4896 sata_common_free_dma_rsrcs(spx);
4907 bp = sata_alloc_local_buffer(spx, count * 512);
4909 SATADBG1(SATA_DBG_ATAPI, spx->txlt_sata_hba_inst,
4921 rval = ddi_dma_sync(spx->txlt_buf_dma_handle, 0, 0,
4936 if (!(spx->txlt_sata_pkt->satapkt_op_mode & SATA_OPMODE_SYNCH)) {
4937 spx->txlt_sata_pkt->satapkt_comp =
4944 if (sata_hba_start(spx, &rval) != 0) {
4952 sata_txlt_unmap_completion(spx->txlt_sata_pkt);
4971 sata_txlt_mode_sense(sata_pkt_txlate_t *spx)
4973 struct scsi_pkt *scsipkt = spx->txlt_scsi_pkt;
4974 struct buf *bp = spx->txlt_sata_pkt->satapkt_cmd.satacmd_bp;
4982 kmutex_t *cport_mutex = &(SATA_TXLT_CPORT_MUTEX(spx));
4984 SATADBG2(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst,
4986 spx->txlt_scsi_pkt->pkt_cdbp[2] >> 6,
4987 spx->txlt_scsi_pkt->pkt_cdbp[2] & 0x3f);
5000 if (((rval = sata_txlt_generic_pkt_info(spx, &reason, 0)) !=
5032 if (spx->txlt_scsi_pkt->pkt_cdbp[0] == SCMD_MODE_SENSE) {
5054 spx->txlt_sata_hba_inst,
5055 &spx->txlt_sata_pkt->satapkt_device);
5137 sense = sata_arq_sense(spx);
5181 sense = sata_arq_sense(spx);
5188 if (spx->txlt_scsi_pkt->pkt_cdbp[0] == SCMD_MODE_SENSE) {
5222 SATADBG1(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst,
5229 if (taskq_dispatch(SATA_TXLT_TASKQ(spx),
5230 (task_func_t *)spx->txlt_scsi_pkt->pkt_comp,
5231 (void *)spx->txlt_scsi_pkt, TQ_NOSLEEP) == NULL) {
5234 } else if (taskq_dispatch(SATA_TXLT_TASKQ(spx),
5235 (task_func_t *)spx->txlt_scsi_pkt->pkt_comp,
5236 (void *)spx->txlt_scsi_pkt, TQ_SLEEP) == NULL) {
5272 sata_txlt_mode_select(sata_pkt_txlate_t *spx)
5274 struct scsi_pkt *scsipkt = spx->txlt_scsi_pkt;
5275 struct buf *bp = spx->txlt_sata_pkt->satapkt_cmd.satacmd_bp;
5282 kmutex_t *cport_mutex = &(SATA_TXLT_CPORT_MUTEX(spx));
5284 SATADBG2(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst,
5286 spx->txlt_scsi_pkt->pkt_cdbp[2] >> 6,
5287 spx->txlt_scsi_pkt->pkt_cdbp[2] & 0x3f);
5291 if (((rval = sata_txlt_generic_pkt_info(spx, &reason, 1)) !=
5307 sense = sata_arq_sense(spx);
5361 spx->txlt_sata_pkt->satapkt_op_mode = SATA_OPMODE_SYNCH;
5373 sense = sata_arq_sense(spx);
5379 stat = sata_mode_select_page_8(spx,
5404 stat = sata_mode_select_page_1c(spx,
5429 stat = sata_mode_select_page_30(spx,
5454 stat = sata_mode_select_page_1a(spx,
5479 sense = sata_arq_sense(spx);
5505 spx->txlt_sata_pkt->satapkt_device.satadev_addr;
5506 rv = sata_fetch_device_identify_data(spx->txlt_sata_hba_inst,
5515 sdinfo = sata_get_device_info(spx->txlt_sata_hba_inst,
5516 &spx->txlt_sata_pkt->satapkt_device);
5541 sense = sata_arq_sense(spx);
5551 SATADBG1(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst,
5558 if (taskq_dispatch(SATA_TXLT_TASKQ(spx),
5559 (task_func_t *)spx->txlt_scsi_pkt->pkt_comp,
5560 (void *)spx->txlt_scsi_pkt, TQ_NOSLEEP) == NULL) {
5563 } else if (taskq_dispatch(SATA_TXLT_TASKQ(spx),
5564 (task_func_t *)spx->txlt_scsi_pkt->pkt_comp,
5565 (void *)spx->txlt_scsi_pkt, TQ_SLEEP) == NULL) {
5583 sata_txlt_ata_pass_thru(sata_pkt_txlate_t *spx)
5585 struct scsi_pkt *scsipkt = spx->txlt_scsi_pkt;
5586 sata_cmd_t *scmd = &spx->txlt_sata_pkt->satapkt_cmd;
5587 struct buf *bp = spx->txlt_sata_pkt->satapkt_cmd.satacmd_bp;
5593 kmutex_t *cport_mutex = &(SATA_TXLT_CPORT_MUTEX(spx));
5597 rval = sata_txlt_generic_pkt_info(spx, &reason, 1);
5612 return (sata_txlt_ata_pass_thru_illegal_cmd(spx));
5618 return (sata_txlt_ata_pass_thru_illegal_cmd(spx));
5636 return (sata_txlt_ata_pass_thru_illegal_cmd(spx));
5646 return (sata_txlt_ata_pass_thru_illegal_cmd(spx));
5655 return (sata_txlt_ata_pass_thru_illegal_cmd(spx));
5664 return (sata_txlt_ata_pass_thru_illegal_cmd(spx));
5673 return (sata_txlt_ata_pass_thru_illegal_cmd(spx));
5793 if (!(spx->txlt_sata_pkt->satapkt_op_mode & SATA_OPMODE_SYNCH)) {
5794 spx->txlt_sata_pkt->satapkt_comp = sata_txlt_apt_completion;
5800 if (sata_hba_start(spx, &rval) != 0) {
5808 sata_txlt_apt_completion(spx->txlt_sata_pkt);
5818 sata_txlt_log_sense(sata_pkt_txlate_t *spx)
5820 struct scsi_pkt *scsipkt = spx->txlt_scsi_pkt;
5821 struct buf *bp = spx->txlt_sata_pkt->satapkt_cmd.satacmd_bp;
5830 kmutex_t *cport_mutex = &(SATA_TXLT_CPORT_MUTEX(spx));
5832 SATADBG2(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst,
5834 spx->txlt_scsi_pkt->pkt_cdbp[2] >> 6,
5835 spx->txlt_scsi_pkt->pkt_cdbp[2] & 0x3f);
5848 if (((rval = sata_txlt_generic_pkt_info(spx, &reason, 1)) !=
5868 sense = sata_arq_sense(spx);
5883 sense = sata_arq_sense(spx);
5910 spx->txlt_sata_hba_inst,
5911 &spx->txlt_sata_pkt->satapkt_device);
5927 sense = sata_arq_sense(spx);
5935 spx->txlt_sata_hba_inst);
5941 sense = sata_arq_sense(spx);
5950 sense = sata_arq_sense(spx);
5961 spx->txlt_sata_hba_inst);
5967 sense = sata_arq_sense(spx);
5976 sense = sata_arq_sense(spx);
5988 spx->txlt_sata_hba_inst);
5994 sense = sata_arq_sense(spx);
6003 sense = sata_arq_sense(spx);
6012 len = sata_build_lsense_page_0e(sdinfo, buf, spx);
6017 sense = sata_arq_sense(spx);
6053 SATADBG1(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst,
6060 if (taskq_dispatch(SATA_TXLT_TASKQ(spx),
6061 (task_func_t *)spx->txlt_scsi_pkt->pkt_comp,
6062 (void *)spx->txlt_scsi_pkt, TQ_NOSLEEP) == NULL) {
6065 } else if (taskq_dispatch(SATA_TXLT_TASKQ(spx),
6066 (task_func_t *)spx->txlt_scsi_pkt->pkt_comp,
6067 (void *)spx->txlt_scsi_pkt, TQ_SLEEP) == NULL) {
6081 sata_txlt_log_select(sata_pkt_txlate_t *spx)
6083 SATADBG1(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst,
6086 return (sata_txlt_invalid_command(spx));
6118 sata_txlt_read(sata_pkt_txlate_t *spx)
6120 struct scsi_pkt *scsipkt = spx->txlt_scsi_pkt;
6121 sata_cmd_t *scmd = &spx->txlt_sata_pkt->satapkt_cmd;
6123 sata_hba_inst_t *shi = SATA_TXLT_HBA_INST(spx);
6124 kmutex_t *cport_mutex = &(SATA_TXLT_CPORT_MUTEX(spx));
6132 if (((rval = sata_txlt_generic_pkt_info(spx, &reason, 0)) !=
6138 sdinfo = sata_get_device_info(spx->txlt_sata_hba_inst,
6139 &spx->txlt_sata_pkt->satapkt_device);
6192 return (sata_txlt_invalid_command(spx));
6202 return (sata_txlt_lba_out_of_range(spx));
6210 if (spx->txlt_dma_cookie_list == NULL) {
6212 return (sata_emul_rw_completion(spx));
6256 (SATA_FEATURES(spx->txlt_sata_hba_inst) &
6268 (SATA_FEATURES(spx->txlt_sata_hba_inst) &
6324 SATADBG3(SATA_DBG_HBA_IF, spx->txlt_sata_hba_inst,
6328 if (!(spx->txlt_sata_pkt->satapkt_op_mode & SATA_OPMODE_SYNCH)) {
6330 spx->txlt_sata_pkt->satapkt_comp = sata_txlt_rw_completion;
6336 if (sata_hba_start(spx, &rval) != 0) {
6350 SATADBG1(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst,
6352 spx->txlt_sata_pkt->satapkt_reason);
6353 sata_txlt_rw_completion(spx->txlt_sata_pkt);
6387 sata_txlt_write(sata_pkt_txlate_t *spx)
6389 struct scsi_pkt *scsipkt = spx->txlt_scsi_pkt;
6390 sata_cmd_t *scmd = &spx->txlt_sata_pkt->satapkt_cmd;
6392 sata_hba_inst_t *shi = SATA_TXLT_HBA_INST(spx);
6397 kmutex_t *cport_mutex = &(SATA_TXLT_CPORT_MUTEX(spx));
6401 if (((rval = sata_txlt_generic_pkt_info(spx, &reason, 0)) !=
6407 sdinfo = sata_get_device_info(spx->txlt_sata_hba_inst,
6408 &spx->txlt_sata_pkt->satapkt_device);
6461 return (sata_txlt_invalid_command(spx));
6471 return (sata_txlt_lba_out_of_range(spx));
6479 if (spx->txlt_dma_cookie_list == NULL) {
6481 return (sata_emul_rw_completion(spx));
6525 (SATA_FEATURES(spx->txlt_sata_hba_inst) &
6537 (SATA_FEATURES(spx->txlt_sata_hba_inst) &
6588 SATADBG3(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst,
6592 if (!(spx->txlt_sata_pkt->satapkt_op_mode & SATA_OPMODE_SYNCH)) {
6594 spx->txlt_sata_pkt->satapkt_comp = sata_txlt_rw_completion;
6600 if (sata_hba_start(spx, &rval) != 0) {
6615 SATADBG1(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst,
6617 spx->txlt_sata_pkt->satapkt_reason);
6618 sata_txlt_rw_completion(spx->txlt_sata_pkt);
6628 sata_txlt_write_buffer(sata_pkt_txlate_t *spx)
6633 struct scsi_pkt *scsipkt = spx->txlt_scsi_pkt;
6634 struct sata_pkt *sata_pkt = spx->txlt_sata_pkt;
6635 sata_cmd_t *scmd = &spx->txlt_sata_pkt->satapkt_cmd;
6637 struct buf *bp = spx->txlt_sata_pkt->satapkt_cmd.satacmd_bp;
6640 kmutex_t *cport_mutex = &(SATA_TXLT_CPORT_MUTEX(spx));
6644 SATADBG1(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst,
6649 if ((rval = sata_txlt_generic_pkt_info(spx, &reason, 1)) !=
6656 spx->txlt_sata_pkt->satapkt_op_mode
6701 spx->txlt_sata_pkt->satapkt_comp = NULL;
6705 if (sata_hba_start(spx, &rval) != 0) {
6720 sata_reidentify_device(spx);
6725 sense = sata_arq_sense(spx);
6741 sata_decode_device_error(spx, sense);
6767 SATA_LOG_D((spx->txlt_sata_hba_inst, CE_WARN,
6775 SATADBG1(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst,
6787 sense = sata_arq_sense(spx);
6794 if (taskq_dispatch(SATA_TXLT_TASKQ(spx),
6795 (task_func_t *)spx->txlt_scsi_pkt->pkt_comp,
6796 (void *)spx->txlt_scsi_pkt, TQ_NOSLEEP) == NULL) {
6799 } else if (taskq_dispatch(SATA_TXLT_TASKQ(spx),
6800 (task_func_t *)spx->txlt_scsi_pkt->pkt_comp,
6801 (void *)spx->txlt_scsi_pkt, TQ_SLEEP) == NULL) {
6813 sata_reidentify_device(sata_pkt_txlate_t *spx)
6819 struct scsi_pkt *scsipkt = spx->txlt_scsi_pkt;
6820 sata_hba_inst_t *sata_hba_inst = spx->txlt_sata_hba_inst;
6821 sata_device_t sata_device = spx->txlt_sata_pkt->satapkt_device;
6886 sata_txlt_synchronize_cache(sata_pkt_txlate_t *spx)
6888 sata_cmd_t *scmd = &spx->txlt_sata_pkt->satapkt_cmd;
6889 kmutex_t *cport_mutex = &(SATA_TXLT_CPORT_MUTEX(spx));
6895 if (((rval = sata_txlt_generic_pkt_info(spx, &reason, 1)) !=
6912 SATADBG1(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst,
6915 if (!(spx->txlt_sata_pkt->satapkt_op_mode & SATA_OPMODE_SYNCH)) {
6917 spx->txlt_sata_pkt->satapkt_comp =
6924 if (sata_hba_start(spx, &rval) != 0) {
6939 SATADBG1(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst,
6941 spx->txlt_sata_pkt->satapkt_reason);
6942 sata_txlt_nodata_cmd_completion(spx->txlt_sata_pkt);
6967 sata_hba_start(sata_pkt_txlate_t *spx, int *rval)
6970 uint8_t cport = SATA_TXLT_CPORT(spx);
6971 uint8_t pmport = SATA_TXLT_PMPORT(spx);
6972 sata_hba_inst_t *sata_hba_inst = spx->txlt_sata_hba_inst;
6980 ASSERT(spx->txlt_sata_pkt != NULL);
6985 &spx->txlt_sata_pkt->satapkt_device);
7002 spx->txlt_sata_pkt->satapkt_cmd.satacmd_flags.
7013 spx->txlt_sata_pkt->satapkt_cmd.satacmd_flags.
7023 cmd = spx->txlt_sata_pkt->satapkt_cmd.satacmd_cmd_reg;
7024 cmd_flags = spx->txlt_sata_pkt->satapkt_cmd.satacmd_flags;
7025 sata_device = &spx->txlt_sata_pkt->satapkt_device;
7029 SATADBG1(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst,
7033 spx->txlt_sata_pkt);
7063 spx->txlt_scsi_pkt->pkt_reason = CMD_INCOMPLETE;
7064 *spx->txlt_scsi_pkt->pkt_scbp = STATUS_QFULL;
7074 if (spx->txlt_sata_pkt->satapkt_device.satadev_addr.qual ==
7076 spx->txlt_sata_pkt->satapkt_device.satadev_addr.qual ==
7106 spx->txlt_scsi_pkt->pkt_reason = CMD_TRAN_ERR;
7123 (void) sata_txlt_invalid_command(spx);
7136 spx->txlt_sata_pkt->satapkt_device.satadev_state;
7150 spx->txlt_scsi_pkt->pkt_reason = CMD_INCOMPLETE;
7159 spx->txlt_scsi_pkt->pkt_reason = CMD_TRAN_ERR;
7199 sata_txlt_lba_out_of_range(sata_pkt_txlate_t *spx)
7201 struct scsi_pkt *scsipkt = spx->txlt_scsi_pkt;
7210 sense = sata_arq_sense(spx);
7214 SATADBG1(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst,
7221 if (taskq_dispatch(SATA_TXLT_TASKQ(spx),
7222 (task_func_t *)spx->txlt_scsi_pkt->pkt_comp,
7223 (void *)spx->txlt_scsi_pkt, TQ_NOSLEEP) == NULL) {
7226 } else if (taskq_dispatch(SATA_TXLT_TASKQ(spx),
7227 (task_func_t *)spx->txlt_scsi_pkt->pkt_comp,
7228 (void *)spx->txlt_scsi_pkt, TQ_SLEEP) == NULL) {
7243 sata_decode_device_error(sata_pkt_txlate_t *spx,
7246 uint8_t err_reg = spx->txlt_sata_pkt->satapkt_cmd.satacmd_error_reg;
7249 ASSERT(spx->txlt_sata_pkt->satapkt_cmd.satacmd_status_reg &
7283 ASSERT(spx->txlt_sata_pkt != NULL);
7293 sata_extract_error_lba(sata_pkt_txlate_t *spx, uint64_t *lba)
7295 sata_cmd_t *sata_cmd = &spx->txlt_sata_pkt->satapkt_cmd;
7316 sata_arq_sense(sata_pkt_txlate_t *spx)
7318 struct scsi_pkt *scsipkt = spx->txlt_scsi_pkt;
7345 sata_txlt_ata_pass_thru_illegal_cmd(sata_pkt_txlate_t *spx)
7347 struct scsi_pkt *scsipkt = spx->txlt_scsi_pkt;
7348 struct scsi_extended_sense *sense = sata_arq_sense(spx);
7355 sense = sata_arq_sense(spx);
7363 if (taskq_dispatch(SATA_TXLT_TASKQ(spx),
7364 (task_func_t *)spx->txlt_scsi_pkt->pkt_comp,
7365 (void *)spx->txlt_scsi_pkt, TQ_NOSLEEP) == NULL) {
7368 } else if (taskq_dispatch(SATA_TXLT_TASKQ(spx),
7369 (task_func_t *)spx->txlt_scsi_pkt->pkt_comp,
7370 (void *)spx->txlt_scsi_pkt, TQ_SLEEP) == NULL) {
7385 sata_txlt_unmap_nodata_cmd(sata_pkt_txlate_t *spx)
7387 struct scsi_pkt *scsipkt = spx->txlt_scsi_pkt;
7397 if (taskq_dispatch(SATA_TXLT_TASKQ(spx),
7398 (task_func_t *)spx->txlt_scsi_pkt->pkt_comp,
7399 (void *)spx->txlt_scsi_pkt, TQ_SLEEP) == NULL) {
7415 sata_emul_rw_completion(sata_pkt_txlate_t *spx)
7417 struct scsi_pkt *scsipkt = spx->txlt_scsi_pkt;
7423 if (!(spx->txlt_sata_pkt->satapkt_op_mode & SATA_OPMODE_SYNCH)) {
7426 if (taskq_dispatch(SATA_TXLT_TASKQ(spx),
7427 (task_func_t *)spx->txlt_scsi_pkt->pkt_comp,
7428 (void *)spx->txlt_scsi_pkt, TQ_NOSLEEP) == NULL) {
7431 } else if (taskq_dispatch(SATA_TXLT_TASKQ(spx),
7432 (task_func_t *)spx->txlt_scsi_pkt->pkt_comp,
7433 (void *)spx->txlt_scsi_pkt, TQ_SLEEP) == NULL) {
7454 sata_pkt_txlate_t *spx =
7457 struct scsi_pkt *scsipkt = spx->txlt_scsi_pkt;
7468 if (spx->txlt_tmp_buf != NULL) {
7470 bp = spx->txlt_sata_pkt->satapkt_cmd.satacmd_bp;
7473 spx->txlt_buf_dma_handle, 0, 0,
7476 bcopy(spx->txlt_tmp_buf, bp->b_un.b_addr,
7488 sense = sata_arq_sense(spx);
7506 sata_extract_error_lba(spx, &lba);
7533 sata_decode_device_error(spx, sense);
7557 spx->txlt_sata_hba_inst,
7592 SATA_LOG_D((spx->txlt_sata_hba_inst, CE_WARN,
7599 SATADBG1(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst,
7622 sata_pkt_txlate_t *spx =
7624 struct scsi_pkt *scsipkt = spx->txlt_scsi_pkt;
7639 sata_pkt_txlate_t *spx =
7642 struct scsi_pkt *scsipkt = spx->txlt_scsi_pkt;
7663 if (spx->txlt_tmp_buf != NULL) {
7665 bp = spx->txlt_sata_pkt->satapkt_cmd.satacmd_bp;
7667 bcopy(spx->txlt_tmp_buf, bp->b_un.b_addr,
7739 sata_pkt_txlate_t *spx =
7742 struct scsi_pkt *scsipkt = spx->txlt_scsi_pkt;
7753 if (spx->txlt_tmp_buf != NULL) {
7755 bp = spx->txlt_sata_pkt->satapkt_cmd.satacmd_bp;
7757 bcopy(spx->txlt_tmp_buf, bp->b_un.b_addr,
7818 sata_free_local_buffer(spx);
7832 sata_pkt_txlate_t *spx =
7835 struct scsi_pkt *scsipkt = spx->txlt_scsi_pkt;
7902 sata_pkt_txlate_t *spx =
7904 struct scsi_pkt *scsipkt = spx->txlt_scsi_pkt;
7917 sense = sata_arq_sense(spx);
7933 sata_decode_device_error(spx, sense);
7959 SATA_LOG_D((spx->txlt_sata_hba_inst, CE_WARN,
7968 SATADBG1(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst,
8211 sata_mode_select_page_8(sata_pkt_txlate_t *spx, struct mode_cache_scsi3 *page,
8214 struct scsi_pkt *scsipkt = spx->txlt_scsi_pkt;
8216 sata_cmd_t *scmd = &spx->txlt_sata_pkt->satapkt_cmd;
8221 sdinfo = sata_get_device_info(spx->txlt_sata_hba_inst,
8222 &spx->txlt_sata_pkt->satapkt_device);
8230 sense = sata_arq_sense(spx);
8280 if (sata_hba_start(spx, rval) != 0)
8289 if (spx->txlt_sata_pkt->satapkt_reason !=
8295 sense = sata_arq_sense(spx);
8319 if (sata_hba_start(spx, rval) != 0)
8328 if (spx->txlt_sata_pkt->satapkt_reason !=
8334 sense = sata_arq_sense(spx);
8346 sata_xlate_errors(spx);
8381 sata_pkt_txlate_t *spx,
8388 struct scsi_pkt *scsipkt = spx->txlt_scsi_pkt;
8389 sata_cmd_t *scmd = &spx->txlt_sata_pkt->satapkt_cmd;
8394 sdinfo = sata_get_device_info(spx->txlt_sata_hba_inst,
8395 &spx->txlt_sata_pkt->satapkt_device);
8404 sense = sata_arq_sense(spx);
8416 sense = sata_arq_sense(spx);
8443 if (sata_hba_start(spx, rval) != 0)
8452 if (spx->txlt_sata_pkt->satapkt_reason == SATA_PKT_COMPLETED)
8456 sata_xlate_errors(spx);
8472 sata_mode_select_page_30(sata_pkt_txlate_t *spx, struct
8476 struct scsi_pkt *scsipkt = spx->txlt_scsi_pkt;
8478 sata_cmd_t *scmd = &spx->txlt_sata_pkt->satapkt_cmd;
8482 sdinfo = sata_get_device_info(spx->txlt_sata_hba_inst,
8483 &spx->txlt_sata_pkt->satapkt_device);
8492 sense = sata_arq_sense(spx);
8525 if (sata_hba_start(spx, rval) != 0)
8532 if (spx->txlt_sata_pkt->satapkt_reason != SATA_PKT_COMPLETED) {
8533 sata_xlate_errors(spx);
8552 sata_mode_select_page_1a(sata_pkt_txlate_t *spx, struct
8556 struct scsi_pkt *scsipkt = spx->txlt_scsi_pkt;
8558 sata_cmd_t *scmd = &spx->txlt_sata_pkt->satapkt_cmd;
8564 sdinfo = sata_get_device_info(spx->txlt_sata_hba_inst,
8565 &spx->txlt_sata_pkt->satapkt_device);
8576 sense = sata_arq_sense(spx);
8607 if (sata_hba_start(spx, rval) != 0) {
8611 (spx->txlt_sata_pkt->satapkt_reason !=
8613 sata_xlate_errors(spx);
9217 sata_pkt_txlate_t *spx)
9225 rval = sata_fetch_smart_data(spx->txlt_sata_hba_inst, sdinfo,
9384 sata_txlt_atapi(sata_pkt_txlate_t *spx)
9386 struct scsi_pkt *scsipkt = spx->txlt_scsi_pkt;
9387 sata_cmd_t *scmd = &spx->txlt_sata_pkt->satapkt_cmd;
9388 struct buf *bp = spx->txlt_sata_pkt->satapkt_cmd.satacmd_bp;
9389 sata_hba_inst_t *sata_hba = SATA_TXLT_HBA_INST(spx);
9391 &spx->txlt_sata_pkt->satapkt_device);
9392 kmutex_t *cport_mutex = &(SATA_TXLT_CPORT_MUTEX(spx));
9400 if (((rval = sata_txlt_generic_pkt_info(spx, &reason, 0)) !=
9450 SATAATAPITRACE(spx, cdblen);
9529 if (!(spx->txlt_sata_pkt->satapkt_op_mode & SATA_OPMODE_SYNCH)) {
9531 spx->txlt_sata_pkt->satapkt_comp = sata_txlt_atapi_completion;
9537 if (sata_hba_start(spx, &rval) != 0) {
9551 SATADBG1(SATA_DBG_SCSI_IF, spx->txlt_sata_hba_inst,
9553 spx->txlt_sata_pkt->satapkt_reason);
9554 sata_txlt_atapi_completion(spx->txlt_sata_pkt);
9571 sata_pkt_txlate_t *spx =
9573 struct scsi_pkt *scsipkt = spx->txlt_scsi_pkt;
9591 if (spx->txlt_tmp_buf != NULL) {
9593 bp = spx->txlt_sata_pkt->satapkt_cmd.satacmd_bp;
9596 spx->txlt_buf_dma_handle, 0, 0,
9599 bcopy(spx->txlt_tmp_buf, bp->b_un.b_addr,
9608 sense = sata_arq_sense(spx);
9632 sata_log(spx->txlt_sata_hba_inst, CE_WARN,
9688 SATA_LOG_D((spx->txlt_sata_hba_inst, CE_WARN,
9700 SATAATAPITRACE(spx, 0);
9718 sata_atapi_err_ret_cmd_setup(sata_pkt_txlate_t *spx, sata_drive_info_t *sdinfo)
9720 sata_pkt_t *spkt = spx->txlt_sata_pkt;
9729 bp = sata_alloc_local_buffer(spx, SATA_ATAPI_MIN_RQSENSE_LEN);
9731 SATADBG1(SATA_DBG_ATAPI, spx->txlt_sata_hba_inst,
9766 scmd->satacmd_err_ret_buf_handle = &spx->txlt_buf_dma_handle;
9892 sata_save_atapi_trace(sata_pkt_txlate_t *spx, int count)
9894 struct scsi_pkt *scsi_pkt = spx->txlt_scsi_pkt;
9912 spx->txlt_sata_pkt->satapkt_reason;
9935 sata_pkt_txlate_t *spx;
9950 spx = kmem_zalloc(sizeof (sata_pkt_txlate_t), KM_SLEEP);
9951 spx->txlt_sata_hba_inst = sata_hba;
9952 spx->txlt_scsi_pkt = NULL; /* No scsi pkt involved */
9953 spkt = sata_pkt_alloc(spx, NULL);
9955 kmem_free(spx, sizeof (sata_pkt_txlate_t));
9962 bp = sata_alloc_local_buffer(spx, sizeof (struct scsi_inquiry));
9964 sata_pkt_free(spx);
9965 kmem_free(spx, sizeof (sata_pkt_txlate_t));
9990 &spx->txlt_sata_pkt->satapkt_device);
10015 if (sata_hba_start(spx, &rval) != 0) {
10030 if (spx->txlt_buf_dma_handle != NULL) {
10035 rval = ddi_dma_sync(spx->txlt_buf_dma_handle, 0, 0,
10040 if (sata_check_for_dma_error(dip, spx)) {
10080 sata_log(spx->txlt_sata_hba_inst, CE_WARN,
10119 sata_free_local_buffer(spx);
10120 sata_pkt_free(spx);
10121 kmem_free(spx, sizeof (sata_pkt_txlate_t));
10140 sata_pkt_txlate_t *spx;
10165 spx = kmem_zalloc(sizeof (sata_pkt_txlate_t), KM_SLEEP);
10166 spx->txlt_sata_hba_inst = sata_hba_inst;
10167 spx->txlt_scsi_pkt = NULL; /* No scsi pkt involved */
10168 spkt = sata_pkt_alloc(spx, NULL);
10170 kmem_free(spx, sizeof (sata_pkt_txlate_t));
10177 bp = sata_alloc_local_buffer(spx, 1024);
10179 sata_pkt_free(spx);
10180 kmem_free(spx, sizeof (sata_pkt_txlate_t));
10221 if (sata_hba_start(spx, &rval) != 0) {
10232 if (spx->txlt_buf_dma_handle != NULL) {
10236 rval = ddi_dma_sync(spx->txlt_buf_dma_handle, 0, 0,
10257 sata_log(spx->txlt_sata_hba_inst, CE_WARN,
10303 sata_free_local_buffer(spx);
10304 sata_pkt_free(spx);
10305 kmem_free(spx, sizeof (sata_pkt_txlate_t));
13056 sata_alloc_local_buffer(sata_pkt_txlate_t *spx, int len)
13062 ASSERT(spx->txlt_sata_pkt != NULL);
13063 ap.a_hba_tran = spx->txlt_sata_hba_inst->satahba_scsi_tran;
13065 spx->txlt_sata_pkt->satapkt_device.satadev_addr.cport,
13066 spx->txlt_sata_pkt->satapkt_device.satadev_addr.pmport,
13067 spx->txlt_sata_pkt->satapkt_device.satadev_addr.qual);
13075 spx->txlt_sata_pkt->satapkt_cmd.satacmd_bp = bp;
13084 SATA_DMA_ATTR(spx->txlt_sata_hba_inst), &cur_dma_attr);
13086 if (sata_dma_buf_setup(spx, PKT_CONSISTENT,
13089 spx->txlt_sata_pkt->satapkt_cmd.satacmd_bp = NULL;
13101 sata_free_local_buffer(sata_pkt_txlate_t *spx)
13103 ASSERT(spx->txlt_sata_pkt != NULL);
13104 ASSERT(spx->txlt_sata_pkt->satapkt_cmd.satacmd_bp != NULL);
13106 spx->txlt_sata_pkt->satapkt_cmd.satacmd_num_dma_cookies = 0;
13107 spx->txlt_sata_pkt->satapkt_cmd.satacmd_dma_cookie_list = NULL;
13109 sata_common_free_dma_rsrcs(spx);
13112 scsi_free_consistent_buf(spx->txlt_sata_pkt->satapkt_cmd.satacmd_bp);
13113 spx->txlt_sata_pkt->satapkt_cmd.satacmd_bp = NULL;
13129 sata_pkt_alloc(sata_pkt_txlate_t *spx, int (*callback)(caddr_t))
13137 SATA_LOG_D((spx->txlt_sata_hba_inst, CE_WARN,
13144 spkt->satapkt_framework_private = spx;
13145 spx->txlt_sata_pkt = spkt;
13153 sata_pkt_free(sata_pkt_txlate_t *spx)
13155 ASSERT(spx->txlt_sata_pkt != NULL);
13156 ASSERT(spx->txlt_sata_pkt->satapkt_cmd.satacmd_bp == NULL);
13157 kmem_free(spx->txlt_sata_pkt, sizeof (sata_pkt_t));
13158 spx->txlt_sata_pkt = NULL;
13234 sata_dma_buf_setup(sata_pkt_txlate_t *spx, int flags,
13247 ASSERT(spx->txlt_sata_pkt != NULL);
13248 bp = spx->txlt_sata_pkt->satapkt_cmd.satacmd_bp;
13252 if (spx->txlt_buf_dma_handle == NULL) {
13257 rval = ddi_dma_alloc_handle(SATA_DIP(spx->txlt_sata_hba_inst),
13258 cur_dma_attr, callback, arg, &spx->txlt_buf_dma_handle);
13261 SATA_LOG_D((spx->txlt_sata_hba_inst, CE_WARN,
13289 spx->txlt_buf_dma_handle,
13291 &spx->txlt_dma_cookie,
13292 &spx->txlt_curwin_num_dma_cookies);
13302 SATADBG2(SATA_DBG_DMA_SETUP, spx->txlt_sata_hba_inst,
13313 ASSERT(spx->txlt_tmp_buf == NULL);
13317 spx->txlt_buf_dma_handle,
13322 &spx->txlt_tmp_buf,
13324 &spx->txlt_tmp_buf_handle);
13329 &spx->txlt_buf_dma_handle);
13330 spx->txlt_buf_dma_handle = NULL;
13335 spx->txlt_sata_hba_inst,
13340 ASSERT(IS_P2ALIGNED(spx->txlt_tmp_buf,
13355 spx->txlt_sata_hba_inst,
13365 bcopy(bp->b_un.b_addr, spx->txlt_tmp_buf,
13370 spx->txlt_buf_dma_handle,
13372 spx->txlt_tmp_buf,
13374 &spx->txlt_dma_cookie,
13375 &spx->txlt_curwin_num_dma_cookies);
13380 SATADBG1(SATA_DBG_DMA_SETUP, spx->txlt_sata_hba_inst,
13386 if (ddi_dma_numwin(spx->txlt_buf_dma_handle,
13387 &spx->txlt_num_dma_win) != DDI_SUCCESS) {
13388 if (spx->txlt_tmp_buf != NULL) {
13390 &spx->txlt_tmp_buf_handle);
13391 spx->txlt_tmp_buf = NULL;
13394 spx->txlt_buf_dma_handle);
13396 &spx->txlt_buf_dma_handle);
13397 spx->txlt_buf_dma_handle = NULL;
13398 SATA_LOG_D((spx->txlt_sata_hba_inst, CE_WARN,
13403 spx->txlt_sata_hba_inst,
13405 spx->txlt_num_dma_win,
13406 spx->txlt_curwin_num_dma_cookies);
13407 spx->txlt_cur_dma_win = 0;
13412 spx->txlt_num_dma_win = 1;
13413 spx->txlt_cur_dma_win = 0;
13415 spx->txlt_sata_hba_inst,
13417 "cookies: %d\n", spx->txlt_curwin_num_dma_cookies);
13422 if (spx->txlt_tmp_buf != NULL) {
13424 &spx->txlt_tmp_buf_handle);
13425 spx->txlt_tmp_buf = NULL;
13427 (void) ddi_dma_free_handle(&spx->txlt_buf_dma_handle);
13428 spx->txlt_buf_dma_handle = NULL;
13429 SATA_LOG_D((spx->txlt_sata_hba_inst, CE_WARN,
13434 spx->txlt_curwin_processed_dma_cookies = 0;
13435 spx->txlt_dma_cookie_list = NULL;
13442 ASSERT(spx->txlt_curwin_processed_dma_cookies <=
13443 spx->txlt_curwin_num_dma_cookies);
13445 if (spx->txlt_curwin_processed_dma_cookies ==
13446 spx->txlt_curwin_num_dma_cookies) {
13451 spx->txlt_cur_dma_win++;
13452 if (spx->txlt_cur_dma_win < spx->txlt_num_dma_win) {
13453 (void) ddi_dma_getwin(spx->txlt_buf_dma_handle,
13454 spx->txlt_cur_dma_win, &offset, &size,
13455 &spx->txlt_dma_cookie,
13456 &spx->txlt_curwin_num_dma_cookies);
13457 spx->txlt_curwin_processed_dma_cookies = 0;
13461 ASSERT(spx->txlt_cur_dma_win >=
13462 spx->txlt_num_dma_win);
13464 spx->txlt_curwin_num_dma_cookies = 0;
13465 spx->txlt_curwin_processed_dma_cookies = 0;
13466 spx->txlt_sata_pkt->
13473 ASSERT((spx->txlt_curwin_num_dma_cookies -
13474 spx->txlt_curwin_processed_dma_cookies) > 0);
13476 if (spx->txlt_dma_cookie_list == &spx->txlt_dma_cookie) {
13478 ASSERT(spx->txlt_curwin_processed_dma_cookies == 0);
13479 spx->txlt_dma_cookie_list = NULL;
13480 spx->txlt_dma_cookie_list_len = 0;
13482 if (spx->txlt_curwin_processed_dma_cookies == 0) {
13488 if (spx->txlt_dma_cookie_list != NULL &&
13489 spx->txlt_dma_cookie_list_len <
13490 spx->txlt_curwin_num_dma_cookies) {
13496 (void) kmem_free(spx->txlt_dma_cookie_list,
13497 spx->txlt_dma_cookie_list_len *
13499 spx->txlt_dma_cookie_list = NULL;
13500 spx->txlt_dma_cookie_list_len = 0;
13502 if (spx->txlt_dma_cookie_list == NULL) {
13509 spx->txlt_curwin_num_dma_cookies);
13514 spx->txlt_dma_cookie_list =
13515 &spx->txlt_dma_cookie;
13516 spx->txlt_dma_cookie_list_len = 1;
13521 spx->txlt_dma_cookie_list = kmem_zalloc(
13525 if (spx->txlt_dma_cookie_list == NULL) {
13527 spx->txlt_sata_hba_inst,
13540 spx->txlt_dma_cookie_list_len = req_len;
13548 *(&spx->txlt_dma_cookie_list[0]) = spx->txlt_dma_cookie;
13550 (uint64_t)spx->txlt_dma_cookie_list[0].dmac_size;
13551 spx->txlt_sata_pkt->satapkt_cmd.satacmd_num_dma_cookies = 1;
13552 spx->txlt_curwin_processed_dma_cookies++;
13553 for (i = 1; (i < spx->txlt_dma_cookie_list_len) &&
13554 (i < spx->txlt_curwin_num_dma_cookies); i++) {
13555 ddi_dma_nextcookie(spx->txlt_buf_dma_handle,
13556 &spx->txlt_dma_cookie_list[i]);
13558 (uint64_t)spx->txlt_dma_cookie_list[i].dmac_size;
13559 spx->txlt_curwin_processed_dma_cookies++;
13560 spx->txlt_sata_pkt->
13564 SATADBG2(SATA_DBG_DMA_SETUP, spx->txlt_sata_hba_inst,
13567 spx->txlt_curwin_processed_dma_cookies,
13568 spx->txlt_curwin_num_dma_cookies);
13576 if (spx->txlt_dma_cookie_list == NULL) {
13577 spx->txlt_dma_cookie_list = &spx->txlt_dma_cookie;
13578 spx->txlt_dma_cookie_list_len = 1;
13585 req_len = MIN(spx->txlt_dma_cookie_list_len,
13586 (spx->txlt_curwin_num_dma_cookies -
13587 spx->txlt_curwin_processed_dma_cookies));
13591 ddi_dma_nextcookie(spx->txlt_buf_dma_handle,
13592 &spx->txlt_dma_cookie_list[i]);
13594 (uint64_t)spx->txlt_dma_cookie_list[i].dmac_size;
13595 spx->txlt_sata_pkt->
13597 spx->txlt_curwin_processed_dma_cookies++;
13601 ASSERT(spx->txlt_sata_pkt->satapkt_cmd.satacmd_num_dma_cookies > 0);
13604 spx->txlt_sata_pkt->satapkt_cmd.satacmd_dma_cookie_list =
13605 &spx->txlt_dma_cookie_list[0];
13608 spx->txlt_num_dma_cookies =
13609 spx->txlt_sata_pkt->satapkt_cmd.satacmd_num_dma_cookies;
13613 spx->txlt_total_residue -= cur_txfer_len;
13624 spx->txlt_total_residue -= bp->b_bcount;
13634 sata_common_free_dma_rsrcs(sata_pkt_txlate_t *spx)
13636 if (spx->txlt_buf_dma_handle != NULL) {
13637 if (spx->txlt_tmp_buf != NULL) {
13642 ddi_dma_mem_free(&spx->txlt_tmp_buf_handle);
13643 spx->txlt_tmp_buf = NULL;
13648 /* ASSERT(spx->txlt_dma_cookie_list != NULL); */
13649 if (spx->txlt_dma_cookie_list != NULL) {
13650 if (spx->txlt_dma_cookie_list !=
13651 &spx->txlt_dma_cookie) {
13652 (void) kmem_free(spx->txlt_dma_cookie_list,
13653 spx->txlt_dma_cookie_list_len *
13655 spx->txlt_dma_cookie_list = NULL;
13658 (void) ddi_dma_unbind_handle(spx->txlt_buf_dma_handle);
13659 (void) ddi_dma_free_handle(&spx->txlt_buf_dma_handle);
13660 spx->txlt_buf_dma_handle = NULL;
13673 sata_pkt_txlate_t *spx;
13678 spx = (sata_pkt_txlate_t *)sata_pkt->satapkt_framework_private;
13680 sata_common_free_dma_rsrcs(spx);
13705 sata_pkt_txlate_t *spx;
13709 spx = kmem_zalloc(sizeof (sata_pkt_txlate_t), KM_SLEEP);
13710 spx->txlt_sata_hba_inst = sata_hba_inst;
13711 spx->txlt_scsi_pkt = NULL; /* No scsi pkt involved */
13712 spkt = sata_pkt_alloc(spx, SLEEP_FUNC);
13714 kmem_free(spx, sizeof (sata_pkt_txlate_t));
13723 bp = sata_alloc_local_buffer(spx, sizeof (sata_id_t));
13725 sata_pkt_free(spx);
13726 kmem_free(spx, sizeof (sata_pkt_txlate_t));
13772 if (spx->txlt_buf_dma_handle != NULL) {
13773 rval = ddi_dma_sync(spx->txlt_buf_dma_handle, 0, 0,
13776 if (sata_check_for_dma_error(dip, spx)) {
13890 sata_free_local_buffer(spx);
13891 sata_pkt_free(spx);
13892 kmem_free(spx, sizeof (sata_pkt_txlate_t));
13916 sata_pkt_txlate_t *spx;
14003 spx = kmem_zalloc(sizeof (sata_pkt_txlate_t), KM_SLEEP);
14004 spx->txlt_sata_hba_inst = sata_hba_inst;
14005 spx->txlt_scsi_pkt = NULL; /* No scsi pkt involved */
14006 spkt = sata_pkt_alloc(spx, SLEEP_FUNC);
14042 sata_pkt_free(spx);
14043 (void) kmem_free(spx, sizeof (sata_pkt_txlate_t));
14068 sata_pkt_txlate_t *spx;
14082 spx = kmem_zalloc(sizeof (sata_pkt_txlate_t), KM_SLEEP);
14083 spx->txlt_sata_hba_inst = sata_hba_inst;
14084 spx->txlt_scsi_pkt = NULL; /* No scsi pkt involved */
14085 spkt = sata_pkt_alloc(spx, SLEEP_FUNC);
14139 sata_pkt_free(spx);
14140 (void) kmem_free(spx, sizeof (sata_pkt_txlate_t));
14159 sata_pkt_txlate_t *spx;
14167 spx = kmem_zalloc(sizeof (sata_pkt_txlate_t), KM_SLEEP);
14168 spx->txlt_sata_hba_inst = sata_hba_inst;
14169 spx->txlt_scsi_pkt = NULL; /* No scsi pkt involved */
14170 spkt = sata_pkt_alloc(spx, SLEEP_FUNC);
14214 sata_pkt_free(spx);
14215 (void) kmem_free(spx, sizeof (sata_pkt_txlate_t));
16712 sata_pkt_txlate_t *spx;
16715 spx = kmem_zalloc(sizeof (sata_pkt_txlate_t), KM_SLEEP);
16716 spx->txlt_sata_hba_inst = sata_hba_inst;
16717 spx->txlt_scsi_pkt = NULL; /* No scsi pkt involved */
16718 spkt = sata_pkt_alloc(spx, SLEEP_FUNC);
16720 kmem_free(spx, sizeof (sata_pkt_txlate_t));
16790 sata_pkt_free(spx);
16791 kmem_free(spx, sizeof (sata_pkt_txlate_t));
16811 sata_pkt_txlate_t *spx;
16819 spx = kmem_zalloc(sizeof (sata_pkt_txlate_t), KM_SLEEP);
16820 spx->txlt_sata_hba_inst = sata_hba_inst;
16821 spx->txlt_scsi_pkt = NULL; /* No scsi pkt involved */
16822 spkt = sata_pkt_alloc(spx, SLEEP_FUNC);
16824 kmem_free(spx, sizeof (sata_pkt_txlate_t));
16845 scmd->satacmd_bp = sata_alloc_local_buffer(spx,
16848 sata_pkt_free(spx);
16849 kmem_free(spx, sizeof (sata_pkt_txlate_t));
16883 if (spx->txlt_buf_dma_handle != NULL) {
16884 rval = ddi_dma_sync(spx->txlt_buf_dma_handle, 0, 0,
16887 if (sata_check_for_dma_error(dip, spx)) {
16900 sata_free_local_buffer(spx);
16901 sata_pkt_free(spx);
16902 kmem_free(spx, sizeof (sata_pkt_txlate_t));
16922 sata_pkt_txlate_t *spx;
16932 spx = kmem_zalloc(sizeof (sata_pkt_txlate_t), KM_SLEEP);
16933 spx->txlt_sata_hba_inst = sata_hba_inst;
16934 spx->txlt_scsi_pkt = NULL; /* No scsi pkt involved */
16935 spkt = sata_pkt_alloc(spx, SLEEP_FUNC);
16937 kmem_free(spx, sizeof (sata_pkt_txlate_t));
16958 scmd->satacmd_bp = sata_alloc_local_buffer(spx,
16961 sata_pkt_free(spx);
16962 kmem_free(spx, sizeof (sata_pkt_txlate_t));
16999 if (spx->txlt_buf_dma_handle != NULL) {
17000 rval = ddi_dma_sync(spx->txlt_buf_dma_handle, 0, 0,
17003 if (sata_check_for_dma_error(dip, spx)) {
17018 sata_free_local_buffer(spx);
17019 sata_pkt_free(spx);
17020 kmem_free(spx, sizeof (sata_pkt_txlate_t));
17038 sata_pkt_txlate_t *spx;
17046 spx = kmem_zalloc(sizeof (sata_pkt_txlate_t), KM_SLEEP);
17047 spx->txlt_sata_hba_inst = sata_hba_inst;
17048 spx->txlt_scsi_pkt = NULL; /* No scsi pkt involved */
17049 spkt = sata_pkt_alloc(spx, SLEEP_FUNC);
17051 kmem_free(spx, sizeof (sata_pkt_txlate_t));
17072 scmd->satacmd_bp = sata_alloc_local_buffer(spx,
17075 sata_pkt_free(spx);
17076 kmem_free(spx, sizeof (sata_pkt_txlate_t));
17109 if (spx->txlt_buf_dma_handle != NULL) {
17110 rval = ddi_dma_sync(spx->txlt_buf_dma_handle, 0, 0,
17113 if (sata_check_for_dma_error(dip, spx)) {
17127 sata_free_local_buffer(spx);
17128 sata_pkt_free(spx);
17129 kmem_free(spx, sizeof (sata_pkt_txlate_t));
17150 sata_pkt_txlate_t *spx;
17154 spx = kmem_zalloc(sizeof (sata_pkt_txlate_t), KM_SLEEP);
17155 spx->txlt_sata_hba_inst = sata_hba_inst;
17156 spx->txlt_scsi_pkt = NULL; /* No scsi pkt involved */
17157 spkt = sata_pkt_alloc(spx, SLEEP_FUNC);
17159 kmem_free(spx, sizeof (sata_pkt_txlate_t));
17180 scmd->satacmd_bp = sata_alloc_local_buffer(spx, log_size * 512);
17182 sata_pkt_free(spx);
17183 kmem_free(spx, sizeof (sata_pkt_txlate_t));
17218 if (spx->txlt_buf_dma_handle != NULL) {
17219 rval = ddi_dma_sync(spx->txlt_buf_dma_handle, 0, 0,
17222 if (sata_check_for_dma_error(dip, spx)) {
17235 sata_free_local_buffer(spx);
17236 sata_pkt_free(spx);
17237 kmem_free(spx, sizeof (sata_pkt_txlate_t));
17254 sata_pkt_txlate_t *spx;
17264 spx = kmem_zalloc(sizeof (sata_pkt_txlate_t), KM_SLEEP);
17265 spx->txlt_sata_hba_inst = sata_hba_inst;
17266 spx->txlt_scsi_pkt = NULL; /* No scsi pkt involved */
17267 spkt = sata_pkt_alloc(spx, SLEEP_FUNC);
17269 kmem_free(spx, sizeof (sata_pkt_txlate_t));
17287 scmd->satacmd_bp = sata_alloc_local_buffer(spx,
17290 sata_pkt_free(spx);
17291 kmem_free(spx, sizeof (sata_pkt_txlate_t));
17326 if (spx->txlt_buf_dma_handle != NULL) {
17327 rval = ddi_dma_sync(spx->txlt_buf_dma_handle, 0, 0,
17330 if (sata_check_for_dma_error(dip, spx)) {
17344 sata_free_local_buffer(spx);
17345 sata_pkt_free(spx);
17346 kmem_free(spx, sizeof (sata_pkt_txlate_t));
17359 sata_ncq_err_ret_cmd_setup(sata_pkt_txlate_t *spx, sata_drive_info_t *sdinfo)
17365 sata_pkt_t *spkt = spx->txlt_sata_pkt;
17385 bp = sata_alloc_local_buffer(spx,
17397 scmd->satacmd_err_ret_buf_handle = &spx->txlt_buf_dma_handle;
17411 sata_xlate_errors(sata_pkt_txlate_t *spx)
17413 struct scsi_pkt *scsipkt = spx->txlt_scsi_pkt;
17418 sense = sata_arq_sense(spx);
17420 switch (spx->txlt_sata_pkt->satapkt_reason) {
17429 if (spx->txlt_sata_pkt->satapkt_cmd.satacmd_status_reg &
17435 sata_decode_device_error(spx, sense);
20712 sata_check_for_dma_error(dev_info_t *dip, sata_pkt_txlate_t *spx)
20718 if (spx->txlt_buf_dma_handle != NULL) {
20719 ddi_fm_dma_err_get(spx->txlt_buf_dma_handle, &de,
20805 sata_pkt_txlate_t *spx =
20809 spx->txlt_sata_hba_inst->satahba_dip)