Lines Matching +full:ata +full:- +full:generic

1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * libata-scsi.c - helper library for ATA
5 * Copyright 2003-2004 Red Hat, Inc. All rights reserved.
6 * Copyright 2003-2004 Jeff Garzik
9 * as Documentation/driver-api/libata.rst
12 * - http://www.t10.org/
13 * - http://www.t13.org/
38 #include "libata-transport.h"
66 RW_RECOVERY_MPAGE_LEN - 2,
76 CACHE_MPAGE_LEN - 2,
85 CONTROL_MPAGE_LEN - 2,
87 0, /* [QAM+QERR may be 1, see 05-359r1] */
89 0, 30 /* extended self test time, see 05-359r1 */
103 ap = ata_shost_to_port(sdev->host); in ata_scsi_park_show()
105 spin_lock_irq(ap->lock); in ata_scsi_park_show()
108 rc = -ENODEV; in ata_scsi_park_show()
111 if (dev->flags & ATA_DFLAG_NO_UNLOAD) { in ata_scsi_park_show()
112 rc = -EOPNOTSUPP; in ata_scsi_park_show()
116 link = dev->link; in ata_scsi_park_show()
118 if (ap->pflags & ATA_PFLAG_EH_IN_PROGRESS && in ata_scsi_park_show()
119 link->eh_context.unloaded_mask & (1 << dev->devno) && in ata_scsi_park_show()
120 time_after(dev->unpark_deadline, now)) in ata_scsi_park_show()
121 msecs = jiffies_to_msecs(dev->unpark_deadline - now); in ata_scsi_park_show()
126 spin_unlock_irq(ap->lock); in ata_scsi_park_show()
145 if (input < -2) in ata_scsi_park_store()
146 return -EINVAL; in ata_scsi_park_store()
148 rc = -EOVERFLOW; in ata_scsi_park_store()
152 ap = ata_shost_to_port(sdev->host); in ata_scsi_park_store()
154 spin_lock_irqsave(ap->lock, flags); in ata_scsi_park_store()
157 rc = -ENODEV; in ata_scsi_park_store()
160 if (dev->class != ATA_DEV_ATA && in ata_scsi_park_store()
161 dev->class != ATA_DEV_ZAC) { in ata_scsi_park_store()
162 rc = -EOPNOTSUPP; in ata_scsi_park_store()
167 if (dev->flags & ATA_DFLAG_NO_UNLOAD) { in ata_scsi_park_store()
168 rc = -EOPNOTSUPP; in ata_scsi_park_store()
172 dev->unpark_deadline = ata_deadline(jiffies, input); in ata_scsi_park_store()
173 dev->link->eh_info.dev_action[dev->devno] |= ATA_EH_PARK; in ata_scsi_park_store()
175 complete(&ap->park_req_pending); in ata_scsi_park_store()
178 case -1: in ata_scsi_park_store()
179 dev->flags &= ~ATA_DFLAG_NO_UNLOAD; in ata_scsi_park_store()
181 case -2: in ata_scsi_park_store()
182 dev->flags |= ATA_DFLAG_NO_UNLOAD; in ata_scsi_park_store()
187 spin_unlock_irqrestore(ap->lock, flags); in ata_scsi_park_store()
214 bool d_sense = (dev->flags & ATA_DFLAG_D_SENSE); in ata_scsi_set_sense()
223 if (!(qc->flags & ATA_QCFLAG_RTF_FILLED)) { in ata_scsi_set_sense_information()
224 ata_dev_dbg(qc->dev, in ata_scsi_set_sense_information()
229 information = ata_tf_read_block(&qc->result_tf, qc->dev); in ata_scsi_set_sense_information()
233 scsi_set_sense_information(qc->scsicmd->sense_buffer, in ata_scsi_set_sense_information()
238 * ata_scsi_set_passthru_sense_fields - Set ATA fields in sense buffer
239 * @qc: ATA PASS-THROUGH command.
241 * Populates "ATA Status Return sense data descriptor" / "Fixed format
242 * sense data" with ATA taskfile fields.
249 struct ata_device *dev = qc->dev; in ata_scsi_set_passthru_sense_fields()
250 struct scsi_cmnd *cmd = qc->scsicmd; in ata_scsi_set_passthru_sense_fields()
251 struct ata_taskfile *tf = &qc->result_tf; in ata_scsi_set_passthru_sense_fields()
252 unsigned char *sb = cmd->sense_buffer; in ata_scsi_set_passthru_sense_fields()
254 if (!(qc->flags & ATA_QCFLAG_RTF_FILLED)) { in ata_scsi_set_passthru_sense_fields()
256 "missing result TF: can't set ATA PT sense fields\n"); in ata_scsi_set_passthru_sense_fields()
279 desc[3] = tf->error; in ata_scsi_set_passthru_sense_fields()
280 desc[5] = tf->nsect; in ata_scsi_set_passthru_sense_fields()
281 desc[7] = tf->lbal; in ata_scsi_set_passthru_sense_fields()
282 desc[9] = tf->lbam; in ata_scsi_set_passthru_sense_fields()
283 desc[11] = tf->lbah; in ata_scsi_set_passthru_sense_fields()
284 desc[12] = tf->device; in ata_scsi_set_passthru_sense_fields()
285 desc[13] = tf->status; in ata_scsi_set_passthru_sense_fields()
291 if (tf->flags & ATA_TFLAG_LBA48) { in ata_scsi_set_passthru_sense_fields()
293 desc[4] = tf->hob_nsect; in ata_scsi_set_passthru_sense_fields()
294 desc[6] = tf->hob_lbal; in ata_scsi_set_passthru_sense_fields()
295 desc[8] = tf->hob_lbam; in ata_scsi_set_passthru_sense_fields()
296 desc[10] = tf->hob_lbah; in ata_scsi_set_passthru_sense_fields()
301 sb[3] = tf->error; in ata_scsi_set_passthru_sense_fields()
302 sb[4] = tf->status; in ata_scsi_set_passthru_sense_fields()
303 sb[5] = tf->device; in ata_scsi_set_passthru_sense_fields()
304 sb[6] = tf->nsect; in ata_scsi_set_passthru_sense_fields()
305 if (tf->flags & ATA_TFLAG_LBA48) { in ata_scsi_set_passthru_sense_fields()
307 if (tf->hob_nsect) in ata_scsi_set_passthru_sense_fields()
309 if (tf->hob_lbal || tf->hob_lbam || tf->hob_lbah) in ata_scsi_set_passthru_sense_fields()
312 sb[9] = tf->lbal; in ata_scsi_set_passthru_sense_fields()
313 sb[10] = tf->lbam; in ata_scsi_set_passthru_sense_fields()
314 sb[11] = tf->lbah; in ata_scsi_set_passthru_sense_fields()
323 scsi_set_sense_field_pointer(cmd->sense_buffer, SCSI_SENSE_BUFFERSIZE, in ata_scsi_set_invalid_field()
332 scsi_set_sense_field_pointer(cmd->sense_buffer, SCSI_SENSE_BUFFERSIZE, in ata_scsi_set_invalid_parameter()
352 * ata_std_bios_param - generic bios head/sector/cylinder calculator used by sd.
358 * Generic bios head/sector/cylinder calculator
382 * ata_scsi_unlock_native_capacity - unlock native capacity
393 struct ata_port *ap = ata_shost_to_port(sdev->host); in ata_scsi_unlock_native_capacity()
397 spin_lock_irqsave(ap->lock, flags); in ata_scsi_unlock_native_capacity()
400 if (dev && dev->n_sectors < dev->n_native_sectors) { in ata_scsi_unlock_native_capacity()
401 dev->flags |= ATA_DFLAG_UNLOCK_HPA; in ata_scsi_unlock_native_capacity()
402 dev->link->eh_info.action |= ATA_EH_RESET; in ata_scsi_unlock_native_capacity()
406 spin_unlock_irqrestore(ap->lock, flags); in ata_scsi_unlock_native_capacity()
412 * ata_get_identity - Handler for HDIO_GET_IDENTITY ioctl
431 return -ENOMSG; in ata_get_identity()
433 if (copy_to_user(dst, dev->id, ATA_ID_WORDS * sizeof(u16))) in ata_get_identity()
434 return -EFAULT; in ata_get_identity()
436 ata_id_string(dev->id, buf, ATA_ID_PROD, ATA_ID_PROD_LEN); in ata_get_identity()
438 return -EFAULT; in ata_get_identity()
440 ata_id_string(dev->id, buf, ATA_ID_FW_REV, ATA_ID_FW_REV_LEN); in ata_get_identity()
442 return -EFAULT; in ata_get_identity()
444 ata_id_string(dev->id, buf, ATA_ID_SERNO, ATA_ID_SERNO_LEN); in ata_get_identity()
446 return -EFAULT; in ata_get_identity()
452 * ata_cmd_ioctl - Handler for HDIO_DRIVE_CMD ioctl
478 return -EINVAL; in ata_cmd_ioctl()
481 return -EFAULT; in ata_cmd_ioctl()
490 rc = -ENOMEM; in ata_cmd_ioctl()
494 scsi_cmd[1] = (4 << 1); /* PIO Data-in */ in ata_cmd_ioctl()
498 scsi_cmd[1] = (3 << 1); /* Non-data */ in ata_cmd_ioctl()
505 if (args[0] == ATA_CMD_SMART) { /* hack -- ide driver does this too */ in ata_cmd_ioctl()
526 /* If we set cc then ATA pass-through will cause a in ata_cmd_ioctl()
534 /* Send userspace a few ATA registers (same as drivers/ide) */ in ata_cmd_ioctl()
536 desc[0] == 0x09) { /* code is "ATA Descriptor" */ in ata_cmd_ioctl()
541 rc = -EFAULT; in ata_cmd_ioctl()
547 rc = -EIO; in ata_cmd_ioctl()
553 rc = -EFAULT; in ata_cmd_ioctl()
560 * ata_task_ioctl - Handler for HDIO_DRIVE_TASK ioctl
585 return -EINVAL; in ata_task_ioctl()
588 return -EFAULT; in ata_task_ioctl()
593 scsi_cmd[1] = (3 << 1); /* Non-data */ in ata_task_ioctl()
614 /* If we set cc then ATA pass-through will cause a in ata_task_ioctl()
622 /* Send userspace ATA registers */ in ata_task_ioctl()
624 desc[0] == 0x09) {/* code is "ATA Descriptor" */ in ata_task_ioctl()
633 rc = -EFAULT; in ata_task_ioctl()
638 rc = -EIO; in ata_task_ioctl()
648 if (ap->flags & ATA_FLAG_PIO_DMA) in ata_ioc32()
650 if (ap->pflags & ATA_PFLAG_PIO32) in ata_ioc32()
663 int rc = -EINVAL; in ata_sas_scsi_ioctl()
668 spin_lock_irqsave(ap->lock, flags); in ata_sas_scsi_ioctl()
670 spin_unlock_irqrestore(ap->lock, flags); in ata_sas_scsi_ioctl()
680 spin_lock_irqsave(ap->lock, flags); in ata_sas_scsi_ioctl()
681 if (ap->pflags & ATA_PFLAG_PIO32CHANGE) { in ata_sas_scsi_ioctl()
683 ap->pflags |= ATA_PFLAG_PIO32; in ata_sas_scsi_ioctl()
685 ap->pflags &= ~ATA_PFLAG_PIO32; in ata_sas_scsi_ioctl()
688 rc = -EINVAL; in ata_sas_scsi_ioctl()
690 spin_unlock_irqrestore(ap->lock, flags); in ata_sas_scsi_ioctl()
698 return -EACCES; in ata_sas_scsi_ioctl()
703 return -EACCES; in ata_sas_scsi_ioctl()
707 rc = -ENOTTY; in ata_sas_scsi_ioctl()
718 return ata_sas_scsi_ioctl(ata_shost_to_port(scsidev->host), in ata_scsi_ioctl()
724 * ata_scsi_qc_new - acquire new ata_queued_cmd reference
725 * @dev: ATA device to which the new command is attached
726 * @cmd: SCSI command that originated this ATA command
730 * ATA command sent to the hardware.
732 * If a command was available, fill in the SCSI-specific
745 struct ata_port *ap = dev->link->ap; in ata_scsi_qc_new()
752 if (ap->flags & ATA_FLAG_SAS_HOST) { in ata_scsi_qc_new()
755 * unique per-device budget token as a tag. in ata_scsi_qc_new()
757 if (WARN_ON_ONCE(cmd->budget_token >= ATA_MAX_QUEUE)) in ata_scsi_qc_new()
759 tag = cmd->budget_token; in ata_scsi_qc_new()
761 tag = scsi_cmd_to_rq(cmd)->tag; in ata_scsi_qc_new()
765 qc->tag = qc->hw_tag = tag; in ata_scsi_qc_new()
766 qc->ap = ap; in ata_scsi_qc_new()
767 qc->dev = dev; in ata_scsi_qc_new()
771 qc->scsicmd = cmd; in ata_scsi_qc_new()
772 qc->scsidone = scsi_done; in ata_scsi_qc_new()
774 qc->sg = scsi_sglist(cmd); in ata_scsi_qc_new()
775 qc->n_elem = scsi_sg_count(cmd); in ata_scsi_qc_new()
777 if (scsi_cmd_to_rq(cmd)->rq_flags & RQF_QUIET) in ata_scsi_qc_new()
778 qc->flags |= ATA_QCFLAG_QUIET; in ata_scsi_qc_new()
791 struct scsi_cmnd *scmd = qc->scsicmd; in ata_qc_set_pc_nbytes()
793 qc->extrabytes = scmd->extra_len; in ata_qc_set_pc_nbytes()
794 qc->nbytes = scsi_bufflen(scmd) + qc->extrabytes; in ata_qc_set_pc_nbytes()
798 * ata_to_sense_error - convert ATA error to SCSI error
799 * @drv_stat: value contained in ATA status register
800 * @drv_err: value contained in ATA error register
805 * Converts an ATA error into a SCSI error. Fill out pointers to
840 /* TRK0 - Track 0 not found */ in ata_to_sense_error()
847 /* SRV/IDNF - ID not found */ in ata_to_sense_error()
850 /* MC - Media Changed */ in ata_to_sense_error()
853 /* ECC - Uncorrectable ECC error */ in ata_to_sense_error()
856 /* BBD - block marked bad */ in ata_to_sense_error()
917 * ata_gen_passthru_sense - Generate check condition sense block.
920 * This function is specific to the ATA pass through commands.
922 * block. If there was no error, we get the request from an ATA
925 * asc,ascq = ATA PASS-THROUGH INFORMATION AVAILABLE
933 struct ata_device *dev = qc->dev; in ata_gen_passthru_sense()
934 struct scsi_cmnd *cmd = qc->scsicmd; in ata_gen_passthru_sense()
935 struct ata_taskfile *tf = &qc->result_tf; in ata_gen_passthru_sense()
938 if (!(qc->flags & ATA_QCFLAG_RTF_FILLED)) { in ata_gen_passthru_sense()
940 "missing result TF: can't generate ATA PT sense data\n"); in ata_gen_passthru_sense()
941 if (qc->err_mask) in ata_gen_passthru_sense()
950 if (qc->err_mask || in ata_gen_passthru_sense()
951 tf->status & (ATA_BUSY | ATA_DF | ATA_ERR | ATA_DRQ)) { in ata_gen_passthru_sense()
952 ata_to_sense_error(tf->status, tf->error, in ata_gen_passthru_sense()
954 ata_scsi_set_sense(qc->dev, cmd, sense_key, asc, ascq); in ata_gen_passthru_sense()
957 * ATA PASS-THROUGH INFORMATION AVAILABLE in ata_gen_passthru_sense()
973 * ata_gen_ata_sense - generate a SCSI fixed sense block
976 * Generate sense block for a failed ATA command @qc.
983 struct ata_device *dev = qc->dev; in ata_gen_ata_sense()
984 struct scsi_cmnd *cmd = qc->scsicmd; in ata_gen_ata_sense()
985 struct ata_taskfile *tf = &qc->result_tf; in ata_gen_ata_sense()
995 if (ata_id_is_locked(dev->id)) { in ata_gen_ata_sense()
1002 if (!(qc->flags & ATA_QCFLAG_RTF_FILLED)) { in ata_gen_ata_sense()
1011 if (qc->err_mask || in ata_gen_ata_sense()
1012 tf->status & (ATA_BUSY | ATA_DF | ATA_ERR | ATA_DRQ)) { in ata_gen_ata_sense()
1013 ata_to_sense_error(tf->status, tf->error, in ata_gen_ata_sense()
1022 tf->error, tf->status, qc->err_mask); in ata_gen_ata_sense()
1029 sdev->use_10_for_rw = 1; in ata_scsi_sdev_config()
1030 sdev->use_10_for_ms = 1; in ata_scsi_sdev_config()
1031 sdev->no_write_same = 1; in ata_scsi_sdev_config()
1033 /* Schedule policy is determined by ->qc_defer() callback and in ata_scsi_sdev_config()
1038 sdev->max_device_blocked = 1; in ata_scsi_sdev_config()
1042 * ata_scsi_dma_need_drain - Check whether data transfer may overflow
1060 return atapi_cmd_type(scmd->cmnd[0]) == ATAPI_MISC; in ata_scsi_dma_need_drain()
1069 if (!ata_id_has_unload(dev->id)) in ata_scsi_dev_config()
1070 dev->flags |= ATA_DFLAG_NO_UNLOAD; in ata_scsi_dev_config()
1073 dev->max_sectors = min(dev->max_sectors, sdev->host->max_sectors); in ata_scsi_dev_config()
1074 lim->max_hw_sectors = dev->max_sectors; in ata_scsi_dev_config()
1076 if (dev->class == ATA_DEV_ATAPI) { in ata_scsi_dev_config()
1077 sdev->sector_size = ATA_SECT_SIZE; in ata_scsi_dev_config()
1080 lim->dma_pad_mask = ATA_DMA_PAD_SZ - 1; in ata_scsi_dev_config()
1083 lim->max_segments--; in ata_scsi_dev_config()
1085 sdev->dma_drain_len = ATAPI_MAX_DRAIN; in ata_scsi_dev_config()
1086 sdev->dma_drain_buf = kmalloc(sdev->dma_drain_len, GFP_NOIO); in ata_scsi_dev_config()
1087 if (!sdev->dma_drain_buf) { in ata_scsi_dev_config()
1089 return -ENOMEM; in ata_scsi_dev_config()
1092 sdev->sector_size = ata_id_logical_sector_size(dev->id); in ata_scsi_dev_config()
1103 sdev->manage_runtime_start_stop = 1; in ata_scsi_dev_config()
1104 sdev->manage_shutdown = 1; in ata_scsi_dev_config()
1105 sdev->manage_restart = ata_acpi_dev_manage_restart(dev); in ata_scsi_dev_config()
1106 sdev->force_runtime_start_on_system_start = 1; in ata_scsi_dev_config()
1116 if (sdev->sector_size > PAGE_SIZE) in ata_scsi_dev_config()
1119 sdev->sector_size); in ata_scsi_dev_config()
1121 lim->dma_alignment = sdev->sector_size - 1; in ata_scsi_dev_config()
1123 if (dev->flags & ATA_DFLAG_AN) in ata_scsi_dev_config()
1124 set_bit(SDEV_EVT_MEDIA_CHANGE, sdev->supported_events); in ata_scsi_dev_config()
1127 depth = min(sdev->host->can_queue, ata_id_queue_depth(dev->id)); in ata_scsi_dev_config()
1131 if (dev->flags & ATA_DFLAG_TRUSTED) in ata_scsi_dev_config()
1132 sdev->security_supported = 1; in ata_scsi_dev_config()
1134 dev->sdev = sdev; in ata_scsi_dev_config()
1139 * ata_scsi_sdev_init - Early setup of SCSI device
1143 * associated with an ATA device is scanned on a port.
1151 struct ata_port *ap = ata_shost_to_port(sdev->host); in ata_scsi_sdev_init()
1159 * consumer (child) and the ata port the supplier (parent). in ata_scsi_sdev_init()
1161 link = device_link_add(&sdev->sdev_gendev, &ap->tdev, in ata_scsi_sdev_init()
1166 dev_name(&sdev->sdev_gendev)); in ata_scsi_sdev_init()
1167 return -ENODEV; in ata_scsi_sdev_init()
1175 * ata_scsi_sdev_configure - Set SCSI device attributes
1181 * SCSI mid-layer behaviors.
1189 struct ata_port *ap = ata_shost_to_port(sdev->host); in ata_scsi_sdev_configure()
1200 * ata_scsi_sdev_destroy - SCSI device is about to be destroyed
1205 * dev->sdev, this function doesn't have to do anything.
1206 * Otherwise, SCSI layer initiated warm-unplug is in progress.
1207 * Clear dev->sdev, schedule the device for ATA detach and invoke
1215 struct ata_port *ap = ata_shost_to_port(sdev->host); in ata_scsi_sdev_destroy()
1219 device_link_remove(&sdev->sdev_gendev, &ap->tdev); in ata_scsi_sdev_destroy()
1221 spin_lock_irqsave(ap->lock, flags); in ata_scsi_sdev_destroy()
1223 if (dev && dev->sdev) { in ata_scsi_sdev_destroy()
1225 dev->sdev = NULL; in ata_scsi_sdev_destroy()
1226 dev->flags |= ATA_DFLAG_DETACH; in ata_scsi_sdev_destroy()
1229 spin_unlock_irqrestore(ap->lock, flags); in ata_scsi_sdev_destroy()
1231 kfree(sdev->dma_drain_buf); in ata_scsi_sdev_destroy()
1236 * ata_scsi_start_stop_xlat - Translate SCSI START STOP UNIT command
1237 * @qc: Storage for translated ATA taskfile
1239 * Sets up an ATA taskfile to issue STANDBY (to stop) or READ VERIFY
1248 * Zero on success, non-zero on error.
1252 struct scsi_cmnd *scmd = qc->scsicmd; in ata_scsi_start_stop_xlat()
1253 const u8 *cdb = scmd->cmnd; in ata_scsi_start_stop_xlat()
1257 if (scmd->cmd_len < 5) { in ata_scsi_start_stop_xlat()
1276 /* Ignore IMMED bit (cdb[1] & 0x1), violates sat-r05 */ in ata_scsi_start_stop_xlat()
1277 if (!ata_dev_power_init_tf(qc->dev, &qc->tf, cdb[4] & 0x1)) { in ata_scsi_start_stop_xlat()
1278 ata_scsi_set_sense(qc->dev, scmd, ABORTED_COMMAND, 0, 0); in ata_scsi_start_stop_xlat()
1292 ata_scsi_set_invalid_field(qc->dev, scmd, fp, bp); in ata_scsi_start_stop_xlat()
1297 * ata_scsi_flush_xlat - Translate SCSI SYNCHRONIZE CACHE command
1298 * @qc: Storage for translated ATA taskfile
1300 * Sets up an ATA taskfile to issue FLUSH CACHE or
1307 * Zero on success, non-zero on error.
1311 struct ata_taskfile *tf = &qc->tf; in ata_scsi_flush_xlat()
1313 tf->flags |= ATA_TFLAG_DEVICE; in ata_scsi_flush_xlat()
1314 tf->protocol = ATA_PROT_NODATA; in ata_scsi_flush_xlat()
1316 if (qc->dev->flags & ATA_DFLAG_FLUSH_EXT) in ata_scsi_flush_xlat()
1317 tf->command = ATA_CMD_FLUSH_EXT; in ata_scsi_flush_xlat()
1319 tf->command = ATA_CMD_FLUSH; in ata_scsi_flush_xlat()
1322 qc->flags |= ATA_QCFLAG_IO; in ata_scsi_flush_xlat()
1328 * scsi_6_lba_len - Get LBA and transfer length
1331 * Calculate LBA and transfer length for 6-byte commands.
1344 * scsi_10_lba_len - Get LBA and transfer length
1347 * Calculate LBA and transfer length for 10-byte commands.
1360 * scsi_16_lba_len - Get LBA and transfer length
1363 * Calculate LBA and transfer length for 16-byte commands.
1376 * scsi_dld - Get duration limit descriptor index
1388 * ata_scsi_verify_xlat - Translate SCSI VERIFY command into an ATA one
1389 * @qc: Storage for translated ATA taskfile
1391 * Converts SCSI VERIFY command to an ATA READ VERIFY command.
1397 * Zero on success, non-zero on error.
1401 struct scsi_cmnd *scmd = qc->scsicmd; in ata_scsi_verify_xlat()
1402 struct ata_taskfile *tf = &qc->tf; in ata_scsi_verify_xlat()
1403 struct ata_device *dev = qc->dev; in ata_scsi_verify_xlat()
1404 u64 dev_sectors = qc->dev->n_sectors; in ata_scsi_verify_xlat()
1405 const u8 *cdb = scmd->cmnd; in ata_scsi_verify_xlat()
1410 tf->flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE; in ata_scsi_verify_xlat()
1411 tf->protocol = ATA_PROT_NODATA; in ata_scsi_verify_xlat()
1415 if (scmd->cmd_len < 10) { in ata_scsi_verify_xlat()
1422 if (scmd->cmd_len < 16) { in ata_scsi_verify_xlat()
1440 if (dev->flags & ATA_DFLAG_LBA) { in ata_scsi_verify_xlat()
1441 tf->flags |= ATA_TFLAG_LBA; in ata_scsi_verify_xlat()
1445 tf->command = ATA_CMD_VERIFY; in ata_scsi_verify_xlat()
1446 tf->device |= (block >> 24) & 0xf; in ata_scsi_verify_xlat()
1448 if (!(dev->flags & ATA_DFLAG_LBA48)) in ata_scsi_verify_xlat()
1452 tf->flags |= ATA_TFLAG_LBA48; in ata_scsi_verify_xlat()
1453 tf->command = ATA_CMD_VERIFY_EXT; in ata_scsi_verify_xlat()
1455 tf->hob_nsect = (n_block >> 8) & 0xff; in ata_scsi_verify_xlat()
1457 tf->hob_lbah = (block >> 40) & 0xff; in ata_scsi_verify_xlat()
1458 tf->hob_lbam = (block >> 32) & 0xff; in ata_scsi_verify_xlat()
1459 tf->hob_lbal = (block >> 24) & 0xff; in ata_scsi_verify_xlat()
1464 tf->nsect = n_block & 0xff; in ata_scsi_verify_xlat()
1466 tf->lbah = (block >> 16) & 0xff; in ata_scsi_verify_xlat()
1467 tf->lbam = (block >> 8) & 0xff; in ata_scsi_verify_xlat()
1468 tf->lbal = block & 0xff; in ata_scsi_verify_xlat()
1470 tf->device |= ATA_LBA; in ata_scsi_verify_xlat()
1479 track = (u32)block / dev->sectors; in ata_scsi_verify_xlat()
1480 cyl = track / dev->heads; in ata_scsi_verify_xlat()
1481 head = track % dev->heads; in ata_scsi_verify_xlat()
1482 sect = (u32)block % dev->sectors + 1; in ata_scsi_verify_xlat()
1485 Cylinder: 0-65535 in ata_scsi_verify_xlat()
1486 Head: 0-15 in ata_scsi_verify_xlat()
1487 Sector: 1-255*/ in ata_scsi_verify_xlat()
1491 tf->command = ATA_CMD_VERIFY; in ata_scsi_verify_xlat()
1492 tf->nsect = n_block & 0xff; /* Sector count 0 means 256 sectors */ in ata_scsi_verify_xlat()
1493 tf->lbal = sect; in ata_scsi_verify_xlat()
1494 tf->lbam = cyl; in ata_scsi_verify_xlat()
1495 tf->lbah = cyl >> 8; in ata_scsi_verify_xlat()
1496 tf->device |= head; in ata_scsi_verify_xlat()
1502 ata_scsi_set_invalid_field(qc->dev, scmd, fp, 0xff); in ata_scsi_verify_xlat()
1506 ata_scsi_set_sense(qc->dev, scmd, ILLEGAL_REQUEST, 0x21, 0x0); in ata_scsi_verify_xlat()
1511 scmd->result = SAM_STAT_GOOD; in ata_scsi_verify_xlat()
1523 req_blocks = blk_rq_bytes(rq) / scmd->device->sector_size; in ata_check_nblocks()
1531 * ata_scsi_rw_xlat - Translate SCSI r/w command into an ATA one
1532 * @qc: Storage for translated ATA taskfile
1535 * ATA counterpart, including starting sector (LBA),
1546 * Zero on success, non-zero on error.
1550 struct scsi_cmnd *scmd = qc->scsicmd; in ata_scsi_rw_xlat()
1551 const u8 *cdb = scmd->cmnd; in ata_scsi_rw_xlat()
1573 if (unlikely(scmd->cmd_len < 10)) { in ata_scsi_rw_xlat()
1585 if (unlikely(scmd->cmd_len < 6)) { in ata_scsi_rw_xlat()
1591 /* for 6-byte r/w commands, transfer length 0 in ata_scsi_rw_xlat()
1601 if (unlikely(scmd->cmd_len < 16)) { in ata_scsi_rw_xlat()
1617 /* Check and compose ATA command */ in ata_scsi_rw_xlat()
1619 /* For 10-byte and 16-byte SCSI R/W commands, transfer in ata_scsi_rw_xlat()
1621 * However, for ATA R/W commands, sector count 0 means in ata_scsi_rw_xlat()
1624 * WARNING: one or two older ATA drives treat 0 as 0... in ata_scsi_rw_xlat()
1628 qc->flags |= ATA_QCFLAG_IO; in ata_scsi_rw_xlat()
1629 qc->nbytes = n_block * scmd->device->sector_size; in ata_scsi_rw_xlat()
1635 if (rc == -ERANGE) in ata_scsi_rw_xlat()
1637 /* treat all other errors as -EINVAL, fall through */ in ata_scsi_rw_xlat()
1639 ata_scsi_set_invalid_field(qc->dev, scmd, fp, 0xff); in ata_scsi_rw_xlat()
1643 ata_scsi_set_sense(qc->dev, scmd, ILLEGAL_REQUEST, 0x21, 0x0); in ata_scsi_rw_xlat()
1648 scmd->result = SAM_STAT_GOOD; in ata_scsi_rw_xlat()
1654 struct scsi_cmnd *cmd = qc->scsicmd; in ata_qc_done()
1655 void (*done)(struct scsi_cmnd *) = qc->scsidone; in ata_qc_done()
1663 struct scsi_cmnd *cmd = qc->scsicmd; in ata_scsi_qc_complete()
1664 u8 *cdb = cmd->cmnd; in ata_scsi_qc_complete()
1665 bool have_sense = qc->flags & ATA_QCFLAG_SENSE_VALID; in ata_scsi_qc_complete()
1668 bool is_error = qc->err_mask != 0; in ata_scsi_qc_complete()
1670 /* For ATA pass thru (SAT) commands, generate a sense block if in ata_scsi_qc_complete()
1673 * condition is generated and the ATA register values are returned in ata_scsi_qc_complete()
1677 * asc,ascq = ATA PASS-THROUGH INFORMATION AVAILABLE in ata_scsi_qc_complete()
1684 set_status_byte(qc->scsicmd, SAM_STAT_CHECK_CONDITION); in ata_scsi_qc_complete()
1695 * ata_scsi_translate - Translate then issue SCSI command to ATA device
1696 * @dev: ATA device to which the command is addressed
1698 * @xlat_func: Actor which translates @cmd to an ATA taskfile
1700 * Our ->queuecommand() function has decided that the SCSI
1701 * command issued can be directly translated into an ATA
1708 * ATA command, else 1 to finish translation. If 1 is returned
1709 * then cmd->result (and possibly cmd->sense_buffer) are assumed
1723 struct ata_port *ap = dev->link->ap; in ata_scsi_translate()
1731 /* data is present; dma-map it */ in ata_scsi_translate()
1732 if (cmd->sc_data_direction == DMA_FROM_DEVICE || in ata_scsi_translate()
1733 cmd->sc_data_direction == DMA_TO_DEVICE) { in ata_scsi_translate()
1741 qc->dma_dir = cmd->sc_data_direction; in ata_scsi_translate()
1744 qc->complete_fn = ata_scsi_qc_complete; in ata_scsi_translate()
1749 if (ap->ops->qc_defer) { in ata_scsi_translate()
1750 if ((rc = ap->ops->qc_defer(qc))) in ata_scsi_translate()
1766 cmd->result = (DID_ERROR << 16); in ata_scsi_translate()
1780 * ata_scsi_rbuf_fill - wrapper for SCSI command simulators
1789 * completed successfully (0), or not (in which case cmd->result
1809 cmd->result = SAM_STAT_GOOD; in ata_scsi_rbuf_fill()
1811 scsi_set_resid(cmd, scsi_bufflen(cmd) - len); in ata_scsi_rbuf_fill()
1818 * ata_scsiop_inq_std - Simulate standard INQUIRY command
1824 * with non-VPD INQUIRY command output.
1834 0x60, /* SAM-3 (no version claimed) */ in ata_scsiop_inq_std()
1837 0x20, /* SBC-2 (no version claimed) */ in ata_scsiop_inq_std()
1840 0x00 /* SPC-3 (no version claimed) */ in ata_scsiop_inq_std()
1844 0xA0, /* SAM-5 (no version claimed) */ in ata_scsiop_inq_std()
1847 0x00, /* SBC-4 (no version claimed) */ in ata_scsiop_inq_std()
1850 0xC0, /* SPC-5 (no version claimed) */ in ata_scsiop_inq_std()
1859 0x5, /* claim SPC-3 version compatibility */ in ata_scsiop_inq_std()
1861 95 - 4, in ata_scsiop_inq_std()
1868 * Set the SCSI Removable Media Bit (RMB) if the ATA removable media in ata_scsiop_inq_std()
1869 * device bit (obsolete since ATA-8 ACS) is set. in ata_scsiop_inq_std()
1871 if (ata_id_removable(dev->id)) in ata_scsiop_inq_std()
1874 if (dev->class == ATA_DEV_ZAC) { in ata_scsiop_inq_std()
1876 hdr[2] = 0x7; /* claim SPC-5 version compatibility */ in ata_scsiop_inq_std()
1879 if (dev->flags & ATA_DFLAG_CDL) in ata_scsiop_inq_std()
1880 hdr[2] = 0xd; /* claim SPC-6 version compatibility */ in ata_scsiop_inq_std()
1883 memcpy(&rbuf[8], "ATA ", 8); in ata_scsiop_inq_std()
1884 ata_id_string(dev->id, &rbuf[16], ATA_ID_PROD, 16); in ata_scsiop_inq_std()
1887 ata_id_string(dev->id, &rbuf[32], ATA_ID_FW_REV + 2, 4); in ata_scsiop_inq_std()
1889 ata_id_string(dev->id, &rbuf[32], ATA_ID_FW_REV, 4); in ata_scsiop_inq_std()
1894 if (ata_id_zoned_cap(dev->id) || dev->class == ATA_DEV_ZAC) in ata_scsiop_inq_std()
1907 * ata_scsiop_inq_00 - Simulate INQUIRY VPD page 0, list of pages
1925 0x89, /* page 0x89, ata info page */ in ata_scsiop_inq_00()
1945 * ata_scsiop_inq_80 - Simulate INQUIRY VPD page 80, device serial number
1950 * Returns ATA device serial number.
1966 ata_id_string(dev->id, (unsigned char *) &rbuf[4], in ata_scsiop_inq_80()
1973 * ata_scsiop_inq_83 - Simulate INQUIRY VPD page 83, device identity
1979 * - vendor specific ASCII containing the ATA serial number
1980 * - SAT defined "t10 vendor id based" containing ASCII vendor
1981 * name ("ATA "), model and serial numbers.
1999 ata_id_string(dev->id, (unsigned char *) rbuf + num, in ata_scsiop_inq_83()
2009 memcpy(rbuf + num, "ATA ", 8); in ata_scsiop_inq_83()
2011 ata_id_string(dev->id, (unsigned char *) rbuf + num, ATA_ID_PROD, in ata_scsiop_inq_83()
2014 ata_id_string(dev->id, (unsigned char *) rbuf + num, ATA_ID_SERNO, in ata_scsiop_inq_83()
2018 if (ata_id_has_wwn(dev->id)) { in ata_scsiop_inq_83()
2025 ata_id_string(dev->id, (unsigned char *) rbuf + num, in ata_scsiop_inq_83()
2029 rbuf[3] = num - 4; /* page len (assume less than 256 bytes) */ in ata_scsiop_inq_83()
2035 * ata_scsiop_inq_89 - Simulate INQUIRY VPD page 89, ATA info
2040 * Yields SAT-specified ATA VPD page.
2060 /* we don't store the ATA device signature, so we fake it */ in ata_scsiop_inq_89()
2067 memcpy(&rbuf[60], &dev->id[0], 512); in ata_scsiop_inq_89()
2073 * ata_scsiop_inq_b0 - Simulate INQUIRY VPD page B0, Block Limits
2098 min_io_sectors = 1 << ata_id_log2_per_physical_sector(dev->id); in ata_scsiop_inq_b0()
2104 * The ATA spec doesn't even know about a granularity or alignment in ata_scsiop_inq_b0()
2107 * that we support some form of unmap - in thise case via WRITE SAME in ata_scsiop_inq_b0()
2110 if (ata_id_has_trim(dev->id)) { in ata_scsiop_inq_b0()
2113 if (dev->quirks & ATA_QUIRK_MAX_TRIM_128M) in ata_scsiop_inq_b0()
2114 max_blocks = 128 << (20 - SECTOR_SHIFT); in ata_scsiop_inq_b0()
2124 * ata_scsiop_inq_b1 - Simulate INQUIRY VPD page B1, Block Device
2138 int form_factor = ata_id_form_factor(dev->id); in ata_scsiop_inq_b1()
2139 int media_rotation_rate = ata_id_rotation_rate(dev->id); in ata_scsiop_inq_b1()
2140 u8 zoned = ata_id_zoned_cap(dev->id); in ata_scsiop_inq_b1()
2154 * ata_scsiop_inq_b2 - Simulate INQUIRY VPD page B2, Logical Block
2168 /* SCSI Thin Provisioning VPD page: SBC-3 rev 22 or later */ in ata_scsiop_inq_b2()
2177 * ata_scsiop_inq_b6 - Simulate INQUIRY VPD page B6, Zoned Block Device
2197 * zbc-r05 SCSI Zoned Block device characteristics VPD page in ata_scsiop_inq_b6()
2203 * URSWRZ bit is only meaningful for host-managed ZAC drives in ata_scsiop_inq_b6()
2205 if (dev->zac_zoned_cap & 1) in ata_scsiop_inq_b6()
2207 put_unaligned_be32(dev->zac_zones_optimal_open, &rbuf[8]); in ata_scsiop_inq_b6()
2208 put_unaligned_be32(dev->zac_zones_optimal_nonseq, &rbuf[12]); in ata_scsiop_inq_b6()
2209 put_unaligned_be32(dev->zac_zones_max_open, &rbuf[16]); in ata_scsiop_inq_b6()
2215 * ata_scsiop_inq_b9 - Simulate INQUIRY VPD page B9, Concurrent Positioning
2229 struct ata_cpr_log *cpr_log = dev->cpr_log; in ata_scsiop_inq_b9()
2238 /* SCSI Concurrent Positioning Ranges VPD page: SBC-5 rev 1 or later */ in ata_scsiop_inq_b9()
2240 put_unaligned_be16(64 + (int)cpr_log->nr_cpr * 32 - 4, &rbuf[2]); in ata_scsiop_inq_b9()
2242 for (i = 0; i < cpr_log->nr_cpr; i++, desc += 32) { in ata_scsiop_inq_b9()
2243 desc[0] = cpr_log->cpr[i].num; in ata_scsiop_inq_b9()
2244 desc[1] = cpr_log->cpr[i].num_storage_elements; in ata_scsiop_inq_b9()
2245 put_unaligned_be64(cpr_log->cpr[i].start_lba, &desc[8]); in ata_scsiop_inq_b9()
2246 put_unaligned_be64(cpr_log->cpr[i].num_lbas, &desc[16]); in ata_scsiop_inq_b9()
2253 * ata_scsiop_inquiry - Simulate INQUIRY command
2266 const u8 *scsicmd = cmd->cmnd; in ata_scsiop_inquiry()
2304 * modecpy - Prepare response for MODE SENSE
2310 * Generate a generic MODE SENSE page for either current or changeable
2320 memset(dest + 2, 0, n - 2); in modecpy()
2327 * ata_msense_caching - Simulate MODE SENSE caching info page
2352 * Simulate MODE SENSE control mode page, sub-page 0.
2363 bool d_sense = (dev->flags & ATA_DFLAG_D_SENSE); in ata_msense_control_spg0()
2373 * Translate an ATA duration limit in microseconds to a SCSI duration limit
2374 * using the t2cdlunits 0xa (10ms). Since the SCSI duration limits are 2-bytes
2385 * Simulate MODE SENSE control mode page, sub-pages 07h and 08h
2395 if (!(dev->flags & ATA_DFLAG_CDL) || !dev->cdl) in ata_msense_control_spgt2()
2398 cdl = dev->cdl->desc_log_buf; in ata_msense_control_spgt2()
2407 put_unaligned_be16(CDL_T2_SUB_MPAGE_LEN - 4, &buf[2]); in ata_msense_control_spgt2()
2444 * Simulate MODE SENSE control mode page, sub-page f2h
2445 * (ATA feature control mode page).
2455 * The first four bytes of ATA Feature Control mode page are a header. in ata_msense_control_ata_feature()
2458 put_unaligned_be16(ATA_FEATURE_SUB_MPAGE_LEN - 4, &buf[2]); in ata_msense_control_ata_feature()
2460 if (dev->flags & ATA_DFLAG_CDL_ENABLED) in ata_msense_control_ata_feature()
2469 * ata_msense_control - Simulate MODE SENSE control mode page
2470 * @dev: ATA device of interest
2472 * @spg: sub-page code
2475 * Generate a generic MODE SENSE control mode page.
2505 * ata_msense_rw_recovery - Simulate MODE SENSE r/w error recovery page
2509 * Generate a generic MODE SENSE r/w error recovery page.
2522 * ata_scsiop_mode_sense - Simulate MODE SENSE 6, 10 commands
2537 u8 *scsicmd = cmd->cmnd, *p = rbuf; in ata_scsiop_mode_sense()
2577 * Supported subpages: all subpages and sub-pages 07h, 08h and f2h of in ata_scsiop_mode_sense()
2587 if (dev->flags & ATA_DFLAG_CDL && pg == CONTROL_MPAGE) in ata_scsiop_mode_sense()
2602 p += ata_msense_caching(dev->id, p, page_control == 1); in ata_scsiop_mode_sense()
2611 p += ata_msense_caching(dev->id, p, page_control == 1); in ata_scsiop_mode_sense()
2620 if (dev->flags & ATA_DFLAG_FUA) in ata_scsiop_mode_sense()
2624 rbuf[0] = p - rbuf - 1; in ata_scsiop_mode_sense()
2634 put_unaligned_be16(p - rbuf - 2, &rbuf[0]); in ata_scsiop_mode_sense()
2654 * ata_scsiop_read_cap - Simulate READ CAPACITY[ 16] commands
2667 u8 *scsicmd = cmd->cmnd; in ata_scsiop_read_cap()
2668 u64 last_lba = dev->n_sectors - 1; /* LBA of the last block */ in ata_scsiop_read_cap()
2673 sector_size = ata_id_logical_sector_size(dev->id); in ata_scsiop_read_cap()
2674 log2_per_phys = ata_id_log2_per_physical_sector(dev->id); in ata_scsiop_read_cap()
2675 lowest_aligned = ata_id_logical_sector_offset(dev->id, log2_per_phys); in ata_scsiop_read_cap()
2681 /* sector count, 32-bit */ in ata_scsiop_read_cap()
2706 /* sector count, 64-bit */ in ata_scsiop_read_cap()
2722 if (ata_id_zoned_cap(dev->id) || dev->class == ATA_DEV_ZAC) in ata_scsiop_read_cap()
2728 if (ata_id_has_trim(dev->id) && !(dev->quirks & ATA_QUIRK_NOTRIM)) { in ata_scsiop_read_cap()
2731 if (ata_id_has_zero_after_trim(dev->id) && in ata_scsiop_read_cap()
2732 dev->quirks & ATA_QUIRK_ZERO_AFTER_TRIM) { in ata_scsiop_read_cap()
2742 * ata_scsiop_report_luns - Simulate REPORT LUNS command
2764 * 1) Fake MMC-5 version, to indicate to the Linux scsi midlayer this is a
2782 struct scsi_cmnd *cmd = qc->scsicmd; in atapi_qc_complete()
2783 unsigned int err_mask = qc->err_mask; in atapi_qc_complete()
2786 if (unlikely(err_mask || qc->flags & ATA_QCFLAG_SENSE_VALID)) { in atapi_qc_complete()
2788 if (!(qc->flags & ATA_QCFLAG_SENSE_VALID)) in atapi_qc_complete()
2791 /* SCSI EH automatically locks door if sdev->locked is in atapi_qc_complete()
2794 * creates a loop - SCSI EH issues door lock which in atapi_qc_complete()
2798 * If door lock fails, always clear sdev->locked to in atapi_qc_complete()
2802 * sure qc->dev->sdev isn't NULL before dereferencing. in atapi_qc_complete()
2804 if (qc->cdb[0] == ALLOW_MEDIUM_REMOVAL && qc->dev->sdev) in atapi_qc_complete()
2805 qc->dev->sdev->locked = 0; in atapi_qc_complete()
2807 qc->scsicmd->result = SAM_STAT_CHECK_CONDITION; in atapi_qc_complete()
2813 if (cmd->cmnd[0] == INQUIRY && (cmd->cmnd[1] & 0x03) == 0) in atapi_qc_complete()
2815 cmd->result = SAM_STAT_GOOD; in atapi_qc_complete()
2820 * atapi_xlat - Initialize PACKET taskfile
2827 * Zero on success, non-zero on failure.
2831 struct scsi_cmnd *scmd = qc->scsicmd; in atapi_xlat()
2832 struct ata_device *dev = qc->dev; in atapi_xlat()
2833 int nodata = (scmd->sc_data_direction == DMA_NONE); in atapi_xlat()
2834 int using_pio = !nodata && (dev->flags & ATA_DFLAG_PIO); in atapi_xlat()
2837 memset(qc->cdb, 0, dev->cdb_len); in atapi_xlat()
2838 memcpy(qc->cdb, scmd->cmnd, scmd->cmd_len); in atapi_xlat()
2840 qc->complete_fn = atapi_qc_complete; in atapi_xlat()
2842 qc->tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE; in atapi_xlat()
2843 if (scmd->sc_data_direction == DMA_TO_DEVICE) { in atapi_xlat()
2844 qc->tf.flags |= ATA_TFLAG_WRITE; in atapi_xlat()
2847 qc->tf.command = ATA_CMD_PACKET; in atapi_xlat()
2888 qc->tf.lbam = (nbytes & 0xFF); in atapi_xlat()
2889 qc->tf.lbah = (nbytes >> 8); in atapi_xlat()
2892 qc->tf.protocol = ATAPI_PROT_NODATA; in atapi_xlat()
2894 qc->tf.protocol = ATAPI_PROT_PIO; in atapi_xlat()
2897 qc->tf.protocol = ATAPI_PROT_DMA; in atapi_xlat()
2898 qc->tf.feature |= ATAPI_PKT_DMA; in atapi_xlat()
2900 if ((dev->flags & ATA_DFLAG_DMADIR) && in atapi_xlat()
2901 (scmd->sc_data_direction != DMA_TO_DEVICE)) in atapi_xlat()
2903 qc->tf.feature |= ATAPI_DMADIR; in atapi_xlat()
2915 * For the non-PMP case, ata_link_max_devices() returns 1 (SATA case), in ata_find_dev()
2923 int link_max_devices = ata_link_max_devices(&ap->link); in ata_find_dev()
2926 return &ap->link.device[0]; in ata_find_dev()
2929 return &ap->link.device[devno]; in ata_find_dev()
2935 * For PMP-attached devices, the device number corresponds to C in ata_find_dev()
2939 if (devno < ap->nr_pmp_links) in ata_find_dev()
2940 return &ap->pmp_link[devno].device[0]; in ata_find_dev()
2952 if (unlikely(scsidev->channel || scsidev->lun)) in __ata_scsi_find_dev()
2954 devno = scsidev->id; in __ata_scsi_find_dev()
2956 if (unlikely(scsidev->id || scsidev->lun)) in __ata_scsi_find_dev()
2958 devno = scsidev->channel; in __ata_scsi_find_dev()
2965 * ata_scsi_find_dev - lookup ata_device from scsi_cmnd
2966 * @ap: ATA port to which the device is attached
2967 * @scsidev: SCSI device from which we derive the ATA device
2970 * map that onto an ATA bus, and using that mapping
2978 * Associated ATA device, or %NULL if not found.
2992 * ata_scsi_map_proto - Map pass-thru protocol value to taskfile value.
2993 * @byte1: Byte 1 from pass-thru CDB.
3002 case 3: /* Non-data */ in ata_scsi_map_proto()
3006 case 10: /* UDMA Data-in */ in ata_scsi_map_proto()
3007 case 11: /* UDMA Data-Out */ in ata_scsi_map_proto()
3010 case 4: /* PIO Data-in */ in ata_scsi_map_proto()
3011 case 5: /* PIO Data-out */ in ata_scsi_map_proto()
3031 * ata_scsi_pass_thru - convert ATA pass-thru CDB to taskfile
3034 * Handles either 12, 16, or 32-byte versions of the CDB.
3037 * Zero on success, non-zero on failure.
3041 struct ata_taskfile *tf = &(qc->tf); in ata_scsi_pass_thru()
3042 struct scsi_cmnd *scmd = qc->scsicmd; in ata_scsi_pass_thru()
3043 struct ata_device *dev = qc->dev; in ata_scsi_pass_thru()
3044 const u8 *cdb = scmd->cmnd; in ata_scsi_pass_thru()
3048 /* 7Fh variable length cmd means a ata pass-thru(32) */ in ata_scsi_pass_thru()
3052 tf->protocol = ata_scsi_map_proto(cdb[1 + cdb_offset]); in ata_scsi_pass_thru()
3053 if (tf->protocol == ATA_PROT_UNKNOWN) { in ata_scsi_pass_thru()
3063 if (scmd->sc_data_direction != DMA_NONE) { in ata_scsi_pass_thru()
3068 if (ata_is_ncq(tf->protocol)) in ata_scsi_pass_thru()
3069 tf->protocol = ATA_PROT_NCQ_NODATA; in ata_scsi_pass_thru()
3073 tf->flags |= ATA_TFLAG_LBA; in ata_scsi_pass_thru()
3082 * 16-byte CDB - may contain extended commands. in ata_scsi_pass_thru()
3087 tf->hob_feature = cdb[3]; in ata_scsi_pass_thru()
3088 tf->hob_nsect = cdb[5]; in ata_scsi_pass_thru()
3089 tf->hob_lbal = cdb[7]; in ata_scsi_pass_thru()
3090 tf->hob_lbam = cdb[9]; in ata_scsi_pass_thru()
3091 tf->hob_lbah = cdb[11]; in ata_scsi_pass_thru()
3092 tf->flags |= ATA_TFLAG_LBA48; in ata_scsi_pass_thru()
3094 tf->flags &= ~ATA_TFLAG_LBA48; in ata_scsi_pass_thru()
3099 tf->feature = cdb[4]; in ata_scsi_pass_thru()
3100 tf->nsect = cdb[6]; in ata_scsi_pass_thru()
3101 tf->lbal = cdb[8]; in ata_scsi_pass_thru()
3102 tf->lbam = cdb[10]; in ata_scsi_pass_thru()
3103 tf->lbah = cdb[12]; in ata_scsi_pass_thru()
3104 tf->device = cdb[13]; in ata_scsi_pass_thru()
3105 tf->command = cdb[14]; in ata_scsi_pass_thru()
3109 * 12-byte CDB - incapable of extended commands. in ata_scsi_pass_thru()
3111 tf->flags &= ~ATA_TFLAG_LBA48; in ata_scsi_pass_thru()
3113 tf->feature = cdb[3]; in ata_scsi_pass_thru()
3114 tf->nsect = cdb[4]; in ata_scsi_pass_thru()
3115 tf->lbal = cdb[5]; in ata_scsi_pass_thru()
3116 tf->lbam = cdb[6]; in ata_scsi_pass_thru()
3117 tf->lbah = cdb[7]; in ata_scsi_pass_thru()
3118 tf->device = cdb[8]; in ata_scsi_pass_thru()
3119 tf->command = cdb[9]; in ata_scsi_pass_thru()
3123 * 32-byte CDB - may contain extended command fields. in ata_scsi_pass_thru()
3128 tf->hob_feature = cdb[20]; in ata_scsi_pass_thru()
3129 tf->hob_nsect = cdb[22]; in ata_scsi_pass_thru()
3130 tf->hob_lbal = cdb[16]; in ata_scsi_pass_thru()
3131 tf->hob_lbam = cdb[15]; in ata_scsi_pass_thru()
3132 tf->hob_lbah = cdb[14]; in ata_scsi_pass_thru()
3133 tf->flags |= ATA_TFLAG_LBA48; in ata_scsi_pass_thru()
3135 tf->flags &= ~ATA_TFLAG_LBA48; in ata_scsi_pass_thru()
3137 tf->feature = cdb[21]; in ata_scsi_pass_thru()
3138 tf->nsect = cdb[23]; in ata_scsi_pass_thru()
3139 tf->lbal = cdb[19]; in ata_scsi_pass_thru()
3140 tf->lbam = cdb[18]; in ata_scsi_pass_thru()
3141 tf->lbah = cdb[17]; in ata_scsi_pass_thru()
3142 tf->device = cdb[24]; in ata_scsi_pass_thru()
3143 tf->command = cdb[25]; in ata_scsi_pass_thru()
3144 tf->auxiliary = get_unaligned_be32(&cdb[28]); in ata_scsi_pass_thru()
3149 if (ata_is_ncq(tf->protocol)) in ata_scsi_pass_thru()
3150 tf->nsect = qc->hw_tag << 3; in ata_scsi_pass_thru()
3153 tf->device = dev->devno ? in ata_scsi_pass_thru()
3154 tf->device | ATA_DEV1 : tf->device & ~ATA_DEV1; in ata_scsi_pass_thru()
3156 switch (tf->command) { in ata_scsi_pass_thru()
3157 /* READ/WRITE LONG use a non-standard sect_size */ in ata_scsi_pass_thru()
3162 if (tf->protocol != ATA_PROT_PIO || tf->nsect != 1) { in ata_scsi_pass_thru()
3166 qc->sect_size = scsi_bufflen(scmd); in ata_scsi_pass_thru()
3200 qc->sect_size = scmd->device->sector_size; in ata_scsi_pass_thru()
3205 qc->sect_size = ATA_SECT_SIZE; in ata_scsi_pass_thru()
3213 tf->flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE; in ata_scsi_pass_thru()
3214 if (scmd->sc_data_direction == DMA_TO_DEVICE) in ata_scsi_pass_thru()
3215 tf->flags |= ATA_TFLAG_WRITE; in ata_scsi_pass_thru()
3217 qc->flags |= ATA_QCFLAG_RESULT_TF | ATA_QCFLAG_QUIET; in ata_scsi_pass_thru()
3228 if (tf->protocol == ATA_PROT_DMA && !ata_dma_enabled(dev)) { in ata_scsi_pass_thru()
3234 if (ata_is_ncq(tf->protocol) && !ata_ncq_enabled(dev)) { in ata_scsi_pass_thru()
3251 if (multi_count != dev->multi_count) in ata_scsi_pass_thru()
3257 * Filter SET_FEATURES - XFER MODE command -- otherwise, in ata_scsi_pass_thru()
3258 * SET_FEATURES - XFER MODE must be preceded/succeeded in ata_scsi_pass_thru()
3259 * by an update to hardware-specific registers for each in ata_scsi_pass_thru()
3260 * controller (i.e. the reason for ->set_piomode(), in ata_scsi_pass_thru()
3261 * ->set_dmamode(), and ->post_set_mode() hooks). in ata_scsi_pass_thru()
3263 if (tf->command == ATA_CMD_SET_FEATURES && in ata_scsi_pass_thru()
3264 tf->feature == SETFEATURES_XFER) { in ata_scsi_pass_thru()
3284 if (tf->command >= 0x5C && tf->command <= 0x5F && !libata_allow_tpm) { in ata_scsi_pass_thru()
3297 * ata_format_dsm_trim_descr() - SATL Write Same to DSM Trim
3303 * Rewrite the WRITE SAME descriptor to be a DSM TRIM little-endian formatted
3320 struct scsi_device *sdp = cmd->device; in ata_format_dsm_trim_descr()
3321 size_t len = sdp->sector_size; in ata_format_dsm_trim_descr()
3341 count -= 0xffff; in ata_format_dsm_trim_descr()
3351 * ata_scsi_write_same_xlat() - SATL Write Same to ATA SCT Write Same
3358 * - When set translate to DSM TRIM
3359 * - When clear translate to SCT Write Same
3363 struct ata_taskfile *tf = &qc->tf; in ata_scsi_write_same_xlat()
3364 struct scsi_cmnd *scmd = qc->scsicmd; in ata_scsi_write_same_xlat()
3365 struct scsi_device *sdp = scmd->device; in ata_scsi_write_same_xlat()
3366 size_t len = sdp->sector_size; in ata_scsi_write_same_xlat()
3367 struct ata_device *dev = qc->dev; in ata_scsi_write_same_xlat()
3368 const u8 *cdb = scmd->cmnd; in ata_scsi_write_same_xlat()
3389 if (unlikely(scmd->cmd_len < 16)) { in ata_scsi_write_same_xlat()
3395 if (!unmap || (dev->quirks & ATA_QUIRK_NOTRIM) || in ata_scsi_write_same_xlat()
3396 !ata_id_has_trim(dev->id)) { in ata_scsi_write_same_xlat()
3416 * For DATA SET MANAGEMENT TRIM in ACS-2 nsect (aka count) in ata_scsi_write_same_xlat()
3426 tf->protocol = ATA_PROT_NCQ; in ata_scsi_write_same_xlat()
3427 tf->command = ATA_CMD_FPDMA_SEND; in ata_scsi_write_same_xlat()
3428 tf->hob_nsect = ATA_SUBCMD_FPDMA_SEND_DSM & 0x1f; in ata_scsi_write_same_xlat()
3429 tf->nsect = qc->hw_tag << 3; in ata_scsi_write_same_xlat()
3430 tf->hob_feature = (size / 512) >> 8; in ata_scsi_write_same_xlat()
3431 tf->feature = size / 512; in ata_scsi_write_same_xlat()
3433 tf->auxiliary = 1; in ata_scsi_write_same_xlat()
3435 tf->protocol = ATA_PROT_DMA; in ata_scsi_write_same_xlat()
3436 tf->hob_feature = 0; in ata_scsi_write_same_xlat()
3437 tf->feature = ATA_DSM_TRIM; in ata_scsi_write_same_xlat()
3438 tf->hob_nsect = (size / 512) >> 8; in ata_scsi_write_same_xlat()
3439 tf->nsect = size / 512; in ata_scsi_write_same_xlat()
3440 tf->command = ATA_CMD_DSM; in ata_scsi_write_same_xlat()
3443 tf->flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE | ATA_TFLAG_LBA48 | in ata_scsi_write_same_xlat()
3464 * ata_scsiop_maint_in - Simulate a subset of MAINTENANCE_IN
3477 u8 *cdb = cmd->cmnd; in ata_scsiop_maint_in()
3522 if (dev->flags & ATA_DFLAG_CDL) { in ata_scsiop_maint_in()
3533 if (dev->flags & ATA_DFLAG_CDL) { in ata_scsiop_maint_in()
3544 if (ata_id_zoned_cap(dev->id) || in ata_scsiop_maint_in()
3545 dev->class == ATA_DEV_ZAC) in ata_scsiop_maint_in()
3550 if (dev->flags & ATA_DFLAG_TRUSTED) in ata_scsiop_maint_in()
3565 * ata_scsi_report_zones_complete - convert ATA output
3568 * Convert T-13 little-endian field representation into
3569 * T-10 big-endian field representation.
3574 struct scsi_cmnd *scmd = qc->scsicmd; in ata_scsi_report_zones_complete()
3637 struct ata_taskfile *tf = &qc->tf; in ata_scsi_zbc_in_xlat()
3638 struct scsi_cmnd *scmd = qc->scsicmd; in ata_scsi_zbc_in_xlat()
3639 const u8 *cdb = scmd->cmnd; in ata_scsi_zbc_in_xlat()
3640 u16 sect, fp = (u16)-1; in ata_scsi_zbc_in_xlat()
3645 if (unlikely(scmd->cmd_len < 16)) { in ata_scsi_zbc_in_xlat()
3646 ata_dev_warn(qc->dev, "invalid cdb length %d\n", in ata_scsi_zbc_in_xlat()
3647 scmd->cmd_len); in ata_scsi_zbc_in_xlat()
3653 ata_dev_warn(qc->dev, "non-matching transfer count (%d/%d)\n", in ata_scsi_zbc_in_xlat()
3659 ata_dev_warn(qc->dev, "invalid service action %d\n", sa); in ata_scsi_zbc_in_xlat()
3668 ata_dev_warn(qc->dev, "invalid transfer count %d\n", n_block); in ata_scsi_zbc_in_xlat()
3674 if (ata_ncq_enabled(qc->dev) && in ata_scsi_zbc_in_xlat()
3675 ata_fpdma_zac_mgmt_in_supported(qc->dev)) { in ata_scsi_zbc_in_xlat()
3676 tf->protocol = ATA_PROT_NCQ; in ata_scsi_zbc_in_xlat()
3677 tf->command = ATA_CMD_FPDMA_RECV; in ata_scsi_zbc_in_xlat()
3678 tf->hob_nsect = ATA_SUBCMD_FPDMA_RECV_ZAC_MGMT_IN & 0x1f; in ata_scsi_zbc_in_xlat()
3679 tf->nsect = qc->hw_tag << 3; in ata_scsi_zbc_in_xlat()
3680 tf->feature = sect & 0xff; in ata_scsi_zbc_in_xlat()
3681 tf->hob_feature = (sect >> 8) & 0xff; in ata_scsi_zbc_in_xlat()
3682 tf->auxiliary = ATA_SUBCMD_ZAC_MGMT_IN_REPORT_ZONES | (options << 8); in ata_scsi_zbc_in_xlat()
3684 tf->command = ATA_CMD_ZAC_MGMT_IN; in ata_scsi_zbc_in_xlat()
3685 tf->feature = ATA_SUBCMD_ZAC_MGMT_IN_REPORT_ZONES; in ata_scsi_zbc_in_xlat()
3686 tf->protocol = ATA_PROT_DMA; in ata_scsi_zbc_in_xlat()
3687 tf->hob_feature = options; in ata_scsi_zbc_in_xlat()
3688 tf->hob_nsect = (sect >> 8) & 0xff; in ata_scsi_zbc_in_xlat()
3689 tf->nsect = sect & 0xff; in ata_scsi_zbc_in_xlat()
3691 tf->device = ATA_LBA; in ata_scsi_zbc_in_xlat()
3692 tf->lbah = (block >> 16) & 0xff; in ata_scsi_zbc_in_xlat()
3693 tf->lbam = (block >> 8) & 0xff; in ata_scsi_zbc_in_xlat()
3694 tf->lbal = block & 0xff; in ata_scsi_zbc_in_xlat()
3695 tf->hob_lbah = (block >> 40) & 0xff; in ata_scsi_zbc_in_xlat()
3696 tf->hob_lbam = (block >> 32) & 0xff; in ata_scsi_zbc_in_xlat()
3697 tf->hob_lbal = (block >> 24) & 0xff; in ata_scsi_zbc_in_xlat()
3699 tf->flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE | ATA_TFLAG_LBA48; in ata_scsi_zbc_in_xlat()
3700 qc->flags |= ATA_QCFLAG_RESULT_TF; in ata_scsi_zbc_in_xlat()
3704 qc->complete_fn = ata_scsi_report_zones_complete; in ata_scsi_zbc_in_xlat()
3709 ata_scsi_set_invalid_field(qc->dev, scmd, fp, bp); in ata_scsi_zbc_in_xlat()
3714 ata_scsi_set_sense(qc->dev, scmd, ILLEGAL_REQUEST, 0x1a, 0x0); in ata_scsi_zbc_in_xlat()
3720 struct ata_taskfile *tf = &qc->tf; in ata_scsi_zbc_out_xlat()
3721 struct scsi_cmnd *scmd = qc->scsicmd; in ata_scsi_zbc_out_xlat()
3722 struct ata_device *dev = qc->dev; in ata_scsi_zbc_out_xlat()
3723 const u8 *cdb = scmd->cmnd; in ata_scsi_zbc_out_xlat()
3727 u16 fp = (u16)-1; in ata_scsi_zbc_out_xlat()
3729 if (unlikely(scmd->cmd_len < 16)) { in ata_scsi_zbc_out_xlat()
3755 } else if (block >= dev->n_sectors) { in ata_scsi_zbc_out_xlat()
3763 if (ata_ncq_enabled(qc->dev) && in ata_scsi_zbc_out_xlat()
3764 ata_fpdma_zac_mgmt_out_supported(qc->dev)) { in ata_scsi_zbc_out_xlat()
3765 tf->protocol = ATA_PROT_NCQ_NODATA; in ata_scsi_zbc_out_xlat()
3766 tf->command = ATA_CMD_NCQ_NON_DATA; in ata_scsi_zbc_out_xlat()
3767 tf->feature = ATA_SUBCMD_NCQ_NON_DATA_ZAC_MGMT_OUT; in ata_scsi_zbc_out_xlat()
3768 tf->nsect = qc->hw_tag << 3; in ata_scsi_zbc_out_xlat()
3769 tf->auxiliary = sa | ((u16)all << 8); in ata_scsi_zbc_out_xlat()
3771 tf->protocol = ATA_PROT_NODATA; in ata_scsi_zbc_out_xlat()
3772 tf->command = ATA_CMD_ZAC_MGMT_OUT; in ata_scsi_zbc_out_xlat()
3773 tf->feature = sa; in ata_scsi_zbc_out_xlat()
3774 tf->hob_feature = all; in ata_scsi_zbc_out_xlat()
3776 tf->lbah = (block >> 16) & 0xff; in ata_scsi_zbc_out_xlat()
3777 tf->lbam = (block >> 8) & 0xff; in ata_scsi_zbc_out_xlat()
3778 tf->lbal = block & 0xff; in ata_scsi_zbc_out_xlat()
3779 tf->hob_lbah = (block >> 40) & 0xff; in ata_scsi_zbc_out_xlat()
3780 tf->hob_lbam = (block >> 32) & 0xff; in ata_scsi_zbc_out_xlat()
3781 tf->hob_lbal = (block >> 24) & 0xff; in ata_scsi_zbc_out_xlat()
3782 tf->device = ATA_LBA; in ata_scsi_zbc_out_xlat()
3783 tf->flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE | ATA_TFLAG_LBA48; in ata_scsi_zbc_out_xlat()
3788 ata_scsi_set_invalid_field(qc->dev, scmd, fp, 0xff); in ata_scsi_zbc_out_xlat()
3792 ata_scsi_set_sense(qc->dev, scmd, ILLEGAL_REQUEST, 0x1a, 0x0); in ata_scsi_zbc_out_xlat()
3797 * ata_mselect_caching - Simulate MODE SELECT for caching info page
3798 * @qc: Storage for translated ATA taskfile
3811 struct ata_taskfile *tf = &qc->tf; in ata_mselect_caching()
3812 struct ata_device *dev = qc->dev; in ata_mselect_caching()
3822 if (len != CACHE_MPAGE_LEN - 2) { in ata_mselect_caching()
3823 *fp = min(len, CACHE_MPAGE_LEN - 2); in ata_mselect_caching()
3824 return -EINVAL; in ata_mselect_caching()
3830 * Check that read-only bits are not modified. in ata_mselect_caching()
3832 ata_msense_caching(dev->id, mpage, false); in ata_mselect_caching()
3833 for (i = 0; i < CACHE_MPAGE_LEN - 2; i++) { in ata_mselect_caching()
3838 return -EINVAL; in ata_mselect_caching()
3842 tf->flags |= ATA_TFLAG_DEVICE | ATA_TFLAG_ISADDR; in ata_mselect_caching()
3843 tf->protocol = ATA_PROT_NODATA; in ata_mselect_caching()
3844 tf->nsect = 0; in ata_mselect_caching()
3845 tf->command = ATA_CMD_SET_FEATURES; in ata_mselect_caching()
3846 tf->feature = wce ? SETFEATURES_WC_ON : SETFEATURES_WC_OFF; in ata_mselect_caching()
3851 * Simulate MODE SELECT control mode page, sub-page 0.
3856 struct ata_device *dev = qc->dev; in ata_mselect_control_spg0()
3866 if (len != CONTROL_MPAGE_LEN - 2) { in ata_mselect_control_spg0()
3867 *fp = min(len, CONTROL_MPAGE_LEN - 2); in ata_mselect_control_spg0()
3868 return -EINVAL; in ata_mselect_control_spg0()
3874 * Check that read-only bits are not modified. in ata_mselect_control_spg0()
3877 for (i = 0; i < CONTROL_MPAGE_LEN - 2; i++) { in ata_mselect_control_spg0()
3882 return -EINVAL; in ata_mselect_control_spg0()
3886 dev->flags |= ATA_DFLAG_D_SENSE; in ata_mselect_control_spg0()
3888 dev->flags &= ~ATA_DFLAG_D_SENSE; in ata_mselect_control_spg0()
3893 * Translate MODE SELECT control mode page, sub-page f2h (ATA feature mode
3899 struct ata_device *dev = qc->dev; in ata_mselect_control_ata_feature()
3900 struct ata_taskfile *tf = &qc->tf; in ata_mselect_control_ata_feature()
3904 * The first four bytes of ATA Feature Control mode page are a header, in ata_mselect_control_ata_feature()
3907 if (len != ATA_FEATURE_SUB_MPAGE_LEN - 4) { in ata_mselect_control_ata_feature()
3908 *fp = min(len, ATA_FEATURE_SUB_MPAGE_LEN - 4); in ata_mselect_control_ata_feature()
3909 return -EINVAL; in ata_mselect_control_ata_feature()
3918 dev->flags &= ~ATA_DFLAG_CDL_ENABLED; in ata_mselect_control_ata_feature()
3925 if (dev->flags & ATA_DFLAG_NCQ_PRIO_ENABLED) { in ata_mselect_control_ata_feature()
3928 return -EINVAL; in ata_mselect_control_ata_feature()
3932 dev->flags |= ATA_DFLAG_CDL_ENABLED; in ata_mselect_control_ata_feature()
3936 return -EINVAL; in ata_mselect_control_ata_feature()
3939 tf->flags |= ATA_TFLAG_DEVICE | ATA_TFLAG_ISADDR; in ata_mselect_control_ata_feature()
3940 tf->protocol = ATA_PROT_NODATA; in ata_mselect_control_ata_feature()
3941 tf->command = ATA_CMD_SET_FEATURES; in ata_mselect_control_ata_feature()
3942 tf->feature = SETFEATURES_CDL; in ata_mselect_control_ata_feature()
3943 tf->nsect = cdl_action; in ata_mselect_control_ata_feature()
3949 * ata_mselect_control - Simulate MODE SELECT for control page
3950 * @qc: Storage for translated ATA taskfile
3951 * @spg: target sub-page of the control page
3970 return -EINVAL; in ata_mselect_control()
3975 * ata_scsi_mode_select_xlat - Simulate MODE SELECT 6, 10 commands
3976 * @qc: Storage for translated ATA taskfile
3978 * Converts a MODE SELECT command to an ATA SET FEATURES taskfile.
3987 struct scsi_cmnd *scmd = qc->scsicmd; in ata_scsi_mode_select_xlat()
3988 const u8 *cdb = scmd->cmnd; in ata_scsi_mode_select_xlat()
3992 u16 fp = (u16)-1; in ata_scsi_mode_select_xlat()
3999 if (scmd->cmd_len < 5) { in ata_scsi_mode_select_xlat()
4007 if (scmd->cmd_len < 9) { in ata_scsi_mode_select_xlat()
4024 if (!scsi_sg_count(scmd) || scsi_sglist(scmd)->length < len) in ata_scsi_mode_select_xlat()
4040 len -= hdr_len; in ata_scsi_mode_select_xlat()
4050 len -= bd_len; in ata_scsi_mode_select_xlat()
4064 len -= 4; in ata_scsi_mode_select_xlat()
4072 len -= 2; in ata_scsi_mode_select_xlat()
4076 * Supported subpages: all subpages and ATA feature sub-page f2h of in ata_scsi_mode_select_xlat()
4090 if (qc->dev->flags & ATA_DFLAG_CDL && in ata_scsi_mode_select_xlat()
4117 goto skip; /* No ATA command to send */ in ata_scsi_mode_select_xlat()
4135 ata_scsi_set_invalid_field(qc->dev, scmd, fp, bp); in ata_scsi_mode_select_xlat()
4139 ata_scsi_set_invalid_parameter(qc->dev, scmd, fp); in ata_scsi_mode_select_xlat()
4144 ata_scsi_set_sense(qc->dev, scmd, ILLEGAL_REQUEST, 0x1a, 0x0); in ata_scsi_mode_select_xlat()
4148 scmd->result = SAM_STAT_GOOD; in ata_scsi_mode_select_xlat()
4164 struct scsi_cmnd *scmd = qc->scsicmd; in ata_scsi_security_inout_xlat()
4165 const u8 *cdb = scmd->cmnd; in ata_scsi_security_inout_xlat()
4166 struct ata_taskfile *tf = &qc->tf; in ata_scsi_security_inout_xlat()
4171 bool dma = !(qc->dev->flags & ATA_DFLAG_PIO); in ata_scsi_security_inout_xlat()
4174 * We don't support the ATA "security" protocol. in ata_scsi_security_inout_xlat()
4177 ata_scsi_set_invalid_field(qc->dev, scmd, 1, 0); in ata_scsi_security_inout_xlat()
4183 ata_scsi_set_invalid_field(qc->dev, scmd, 6, 0); in ata_scsi_security_inout_xlat()
4188 ata_scsi_set_invalid_field(qc->dev, scmd, 6, 0); in ata_scsi_security_inout_xlat()
4192 /* convert to the sector-based ATA addressing */ in ata_scsi_security_inout_xlat()
4196 tf->protocol = dma ? ATA_PROT_DMA : ATA_PROT_PIO; in ata_scsi_security_inout_xlat()
4197 tf->flags |= ATA_TFLAG_DEVICE | ATA_TFLAG_ISADDR | ATA_TFLAG_LBA; in ata_scsi_security_inout_xlat()
4199 tf->flags |= ATA_TFLAG_WRITE; in ata_scsi_security_inout_xlat()
4200 tf->command = ata_scsi_trusted_op(len, send, dma); in ata_scsi_security_inout_xlat()
4201 tf->feature = secp; in ata_scsi_security_inout_xlat()
4202 tf->lbam = spsp & 0xff; in ata_scsi_security_inout_xlat()
4203 tf->lbah = spsp >> 8; in ata_scsi_security_inout_xlat()
4206 tf->nsect = len & 0xff; in ata_scsi_security_inout_xlat()
4207 tf->lbal = len >> 8; in ata_scsi_security_inout_xlat()
4210 tf->lbah = (1 << 7); in ata_scsi_security_inout_xlat()
4218 * ata_scsi_var_len_cdb_xlat - SATL variable length CDB to Handler
4225 * Zero on success, non-zero on failure
4230 struct scsi_cmnd *scmd = qc->scsicmd; in ata_scsi_var_len_cdb_xlat()
4231 const u8 *cdb = scmd->cmnd; in ata_scsi_var_len_cdb_xlat()
4235 * if service action represents a ata pass-thru(32) command, in ata_scsi_var_len_cdb_xlat()
4246 * ata_get_xlat_func - check if SCSI to ATA translation is possible
4247 * @dev: ATA device
4301 if (!(dev->flags & ATA_DFLAG_TRUSTED)) in ata_get_xlat_func()
4314 struct ata_port *ap = dev->link->ap; in __ata_scsi_queuecmd()
4315 u8 scsi_op = scmd->cmnd[0]; in __ata_scsi_queuecmd()
4320 * However, this check is done without holding the ap->lock (a libata in __ata_scsi_queuecmd()
4323 * ap->lock. in __ata_scsi_queuecmd()
4328 if (unlikely(!scmd->cmd_len)) in __ata_scsi_queuecmd()
4331 if (dev->class == ATA_DEV_ATA || dev->class == ATA_DEV_ZAC) { in __ata_scsi_queuecmd()
4332 if (unlikely(scmd->cmd_len > dev->cdb_len)) in __ata_scsi_queuecmd()
4340 if (unlikely(len > scmd->cmd_len || in __ata_scsi_queuecmd()
4341 len > dev->cdb_len || in __ata_scsi_queuecmd()
4342 scmd->cmd_len > ATAPI_CDB_LEN)) in __ata_scsi_queuecmd()
4347 /* ATA_16 passthru, treat as an ATA command */ in __ata_scsi_queuecmd()
4348 if (unlikely(scmd->cmd_len > 16)) in __ata_scsi_queuecmd()
4362 scmd->result = DID_ERROR << 16; in __ata_scsi_queuecmd()
4368 * ata_scsi_queuecmd - Issue SCSI cdb to libata-managed device
4373 * ATA taskfiles, and queues the taskfiles to be sent to
4377 * ATA and ATAPI devices appearing as SCSI devices.
4380 * ATA host lock
4390 struct scsi_device *scsidev = cmd->device; in ata_scsi_queuecmd()
4396 spin_lock_irqsave(ap->lock, irq_flags); in ata_scsi_queuecmd()
4402 cmd->result = (DID_BAD_TARGET << 16); in ata_scsi_queuecmd()
4406 spin_unlock_irqrestore(ap->lock, irq_flags); in ata_scsi_queuecmd()
4413 * ata_scsi_simulate - simulate SCSI command on ATA device
4426 const u8 *scsicmd = cmd->cmnd; in ata_scsi_simulate()
4453 * turning this into a no-op. in ata_scsi_simulate()
4459 /* no-op's, complete with success */ in ata_scsi_simulate()
4490 for (i = 0; i < host->n_ports; i++) { in ata_scsi_add_hosts()
4491 struct ata_port *ap = host->ports[i]; in ata_scsi_add_hosts()
4494 rc = -ENOMEM; in ata_scsi_add_hosts()
4499 shost->eh_noresume = 1; in ata_scsi_add_hosts()
4500 *(struct ata_port **)&shost->hostdata[0] = ap; in ata_scsi_add_hosts()
4501 ap->scsi_host = shost; in ata_scsi_add_hosts()
4503 shost->transportt = ata_scsi_transport_template; in ata_scsi_add_hosts()
4504 shost->unique_id = ap->print_id; in ata_scsi_add_hosts()
4505 shost->max_id = 16; in ata_scsi_add_hosts()
4506 shost->max_lun = 1; in ata_scsi_add_hosts()
4507 shost->max_channel = 1; in ata_scsi_add_hosts()
4508 shost->max_cmd_len = 32; in ata_scsi_add_hosts()
4510 /* Schedule policy is determined by ->qc_defer() in ata_scsi_add_hosts()
4515 shost->max_host_blocked = 1; in ata_scsi_add_hosts()
4517 rc = scsi_add_host_with_dma(shost, &ap->tdev, ap->host->dev); in ata_scsi_add_hosts()
4525 while (--i >= 0) { in ata_scsi_add_hosts()
4526 struct Scsi_Host *shost = host->ports[i]->scsi_host; in ata_scsi_add_hosts()
4537 struct scsi_device *sdev = dev->sdev; in ata_scsi_assign_ofnode()
4538 struct device *d = ap->host->dev; in ata_scsi_assign_ofnode()
4539 struct device_node *np = d->of_node; in ata_scsi_assign_ofnode()
4549 if (val == dev->devno) { in ata_scsi_assign_ofnode()
4551 sdev->sdev_gendev.of_node = child; in ata_scsi_assign_ofnode()
4575 if (dev->sdev) in ata_scsi_scan_host()
4579 id = dev->devno; in ata_scsi_scan_host()
4581 channel = link->pmp; in ata_scsi_scan_host()
4583 sdev = __scsi_add_device(ap->scsi_host, channel, id, 0, in ata_scsi_scan_host()
4586 dev->sdev = sdev; in ata_scsi_scan_host()
4590 dev->sdev = NULL; in ata_scsi_scan_host()
4601 if (!dev->sdev) in ata_scsi_scan_host()
4623 if (--tries) { in ata_scsi_scan_host()
4632 queue_delayed_work(system_long_wq, &ap->hotplug_task, in ata_scsi_scan_host()
4637 * ata_scsi_offline_dev - offline attached SCSI device
4638 * @dev: ATA device to offline attached SCSI device for
4642 * called with host lock which protects dev->sdev against clearing.
4652 if (dev->sdev) { in ata_scsi_offline_dev()
4653 scsi_device_set_state(dev->sdev, SDEV_OFFLINE); in ata_scsi_offline_dev()
4660 * ata_scsi_remove_dev - remove attached SCSI device
4661 * @dev: ATA device to remove attached SCSI device for
4671 struct ata_port *ap = dev->link->ap; in ata_scsi_remove_dev()
4681 mutex_lock(&ap->scsi_host->scan_mutex); in ata_scsi_remove_dev()
4682 spin_lock_irqsave(ap->lock, flags); in ata_scsi_remove_dev()
4684 /* clearing dev->sdev is protected by host lock */ in ata_scsi_remove_dev()
4685 sdev = dev->sdev; in ata_scsi_remove_dev()
4686 dev->sdev = NULL; in ata_scsi_remove_dev()
4706 spin_unlock_irqrestore(ap->lock, flags); in ata_scsi_remove_dev()
4707 mutex_unlock(&ap->scsi_host->scan_mutex); in ata_scsi_remove_dev()
4711 dev_name(&sdev->sdev_gendev)); in ata_scsi_remove_dev()
4720 struct ata_port *ap = link->ap; in ata_scsi_handle_link_detach()
4726 spin_lock_irqsave(ap->lock, flags); in ata_scsi_handle_link_detach()
4727 if (!(dev->flags & ATA_DFLAG_DETACHED)) { in ata_scsi_handle_link_detach()
4728 spin_unlock_irqrestore(ap->lock, flags); in ata_scsi_handle_link_detach()
4732 dev->flags &= ~ATA_DFLAG_DETACHED; in ata_scsi_handle_link_detach()
4733 spin_unlock_irqrestore(ap->lock, flags); in ata_scsi_handle_link_detach()
4740 * ata_scsi_media_change_notify - send media change event
4751 if (dev->sdev) in ata_scsi_media_change_notify()
4752 sdev_evt_send_simple(dev->sdev, SDEV_EVT_MEDIA_CHANGE, in ata_scsi_media_change_notify()
4757 * ata_scsi_hotplug - SCSI part of hotplug
4758 * @work: Pointer to ATA port to perform SCSI hotplug on
4774 if (ap->pflags & ATA_PFLAG_UNLOADING) in ata_scsi_hotplug()
4777 mutex_lock(&ap->scsi_scan_mutex); in ata_scsi_hotplug()
4783 ata_scsi_handle_link_detach(&ap->link); in ata_scsi_hotplug()
4784 if (ap->pmp_link) in ata_scsi_hotplug()
4786 ata_scsi_handle_link_detach(&ap->pmp_link[i]); in ata_scsi_hotplug()
4791 mutex_unlock(&ap->scsi_scan_mutex); in ata_scsi_hotplug()
4795 * ata_scsi_user_scan - indication for user-initiated bus scan
4818 return -EINVAL; in ata_scsi_user_scan()
4822 return -EINVAL; in ata_scsi_user_scan()
4826 return -EINVAL; in ata_scsi_user_scan()
4830 spin_lock_irqsave(ap->lock, flags); in ata_scsi_user_scan()
4836 struct ata_eh_info *ehi = &link->eh_info; in ata_scsi_user_scan()
4837 ehi->probe_mask |= ATA_ALL_DEVICES; in ata_scsi_user_scan()
4838 ehi->action |= ATA_EH_RESET; in ata_scsi_user_scan()
4844 struct ata_eh_info *ehi = &dev->link->eh_info; in ata_scsi_user_scan()
4845 ehi->probe_mask |= 1 << dev->devno; in ata_scsi_user_scan()
4846 ehi->action |= ATA_EH_RESET; in ata_scsi_user_scan()
4848 rc = -EINVAL; in ata_scsi_user_scan()
4853 spin_unlock_irqrestore(ap->lock, flags); in ata_scsi_user_scan()
4856 spin_unlock_irqrestore(ap->lock, flags); in ata_scsi_user_scan()
4862 * ata_scsi_dev_rescan - initiate scsi_rescan_device()
4863 * @work: Pointer to ATA port to perform scsi_rescan_device()
4865 * After ATA pass thru (SAT) commands are executed successfully,
4881 mutex_lock(&ap->scsi_scan_mutex); in ata_scsi_dev_rescan()
4882 spin_lock_irqsave(ap->lock, flags); in ata_scsi_dev_rescan()
4886 struct scsi_device *sdev = dev->sdev; in ata_scsi_dev_rescan()
4892 if (ap->pflags & ATA_PFLAG_SUSPENDED) in ata_scsi_dev_rescan()
4900 do_resume = dev->flags & ATA_DFLAG_RESUMING; in ata_scsi_dev_rescan()
4902 spin_unlock_irqrestore(ap->lock, flags); in ata_scsi_dev_rescan()
4905 if (ret == -EWOULDBLOCK) { in ata_scsi_dev_rescan()
4909 dev->flags &= ~ATA_DFLAG_RESUMING; in ata_scsi_dev_rescan()
4913 spin_lock_irqsave(ap->lock, flags); in ata_scsi_dev_rescan()
4921 spin_unlock_irqrestore(ap->lock, flags); in ata_scsi_dev_rescan()
4923 mutex_unlock(&ap->scsi_scan_mutex); in ata_scsi_dev_rescan()
4927 schedule_delayed_work(&ap->scsi_rescan_task, in ata_scsi_dev_rescan()