brintos

brintos / linux-shallow public Read only

0
0
Text · 119.1 KiB · f915e3d Raw
4823 lines · c
1// SPDX-License-Identifier: GPL-2.0-or-later2/*3 *  libata-scsi.c - helper library for ATA4 *5 *  Copyright 2003-2004 Red Hat, Inc.  All rights reserved.6 *  Copyright 2003-2004 Jeff Garzik7 *8 *  libata documentation is available via 'make {ps|pdf}docs',9 *  as Documentation/driver-api/libata.rst10 *11 *  Hardware documentation available from12 *  - http://www.t10.org/13 *  - http://www.t13.org/14 */15 16#include <linux/compat.h>17#include <linux/slab.h>18#include <linux/kernel.h>19#include <linux/blkdev.h>20#include <linux/spinlock.h>21#include <linux/export.h>22#include <scsi/scsi.h>23#include <scsi/scsi_host.h>24#include <scsi/scsi_cmnd.h>25#include <scsi/scsi_eh.h>26#include <scsi/scsi_device.h>27#include <scsi/scsi_tcq.h>28#include <scsi/scsi_transport.h>29#include <linux/libata.h>30#include <linux/hdreg.h>31#include <linux/uaccess.h>32#include <linux/suspend.h>33#include <linux/unaligned.h>34#include <linux/ioprio.h>35#include <linux/of.h>36 37#include "libata.h"38#include "libata-transport.h"39 40#define ATA_SCSI_RBUF_SIZE	204841 42static DEFINE_SPINLOCK(ata_scsi_rbuf_lock);43static u8 ata_scsi_rbuf[ATA_SCSI_RBUF_SIZE];44 45typedef unsigned int (*ata_xlat_func_t)(struct ata_queued_cmd *qc);46 47static struct ata_device *__ata_scsi_find_dev(struct ata_port *ap,48					const struct scsi_device *scsidev);49 50#define RW_RECOVERY_MPAGE		0x151#define RW_RECOVERY_MPAGE_LEN		1252#define CACHE_MPAGE			0x853#define CACHE_MPAGE_LEN			2054#define CONTROL_MPAGE			0xa55#define CONTROL_MPAGE_LEN		1256#define ALL_MPAGES			0x3f57#define ALL_SUB_MPAGES			0xff58#define CDL_T2A_SUB_MPAGE		0x0759#define CDL_T2B_SUB_MPAGE		0x0860#define CDL_T2_SUB_MPAGE_LEN		23261#define ATA_FEATURE_SUB_MPAGE		0xf262#define ATA_FEATURE_SUB_MPAGE_LEN	1663 64static const u8 def_rw_recovery_mpage[RW_RECOVERY_MPAGE_LEN] = {65	RW_RECOVERY_MPAGE,66	RW_RECOVERY_MPAGE_LEN - 2,67	(1 << 7),	/* AWRE */68	0,		/* read retry count */69	0, 0, 0, 0,70	0,		/* write retry count */71	0, 0, 072};73 74static const u8 def_cache_mpage[CACHE_MPAGE_LEN] = {75	CACHE_MPAGE,76	CACHE_MPAGE_LEN - 2,77	0,		/* contains WCE, needs to be 0 for logic */78	0, 0, 0, 0, 0, 0, 0, 0, 0,79	0,		/* contains DRA, needs to be 0 for logic */80	0, 0, 0, 0, 0, 0, 081};82 83static const u8 def_control_mpage[CONTROL_MPAGE_LEN] = {84	CONTROL_MPAGE,85	CONTROL_MPAGE_LEN - 2,86	2,	/* DSENSE=0, GLTSD=1 */87	0,	/* [QAM+QERR may be 1, see 05-359r1] */88	0, 0, 0, 0, 0xff, 0xff,89	0, 30	/* extended self test time, see 05-359r1 */90};91 92static ssize_t ata_scsi_park_show(struct device *device,93				  struct device_attribute *attr, char *buf)94{95	struct scsi_device *sdev = to_scsi_device(device);96	struct ata_port *ap;97	struct ata_link *link;98	struct ata_device *dev;99	unsigned long now;100	unsigned int msecs;101	int rc = 0;102 103	ap = ata_shost_to_port(sdev->host);104 105	spin_lock_irq(ap->lock);106	dev = ata_scsi_find_dev(ap, sdev);107	if (!dev) {108		rc = -ENODEV;109		goto unlock;110	}111	if (dev->flags & ATA_DFLAG_NO_UNLOAD) {112		rc = -EOPNOTSUPP;113		goto unlock;114	}115 116	link = dev->link;117	now = jiffies;118	if (ap->pflags & ATA_PFLAG_EH_IN_PROGRESS &&119	    link->eh_context.unloaded_mask & (1 << dev->devno) &&120	    time_after(dev->unpark_deadline, now))121		msecs = jiffies_to_msecs(dev->unpark_deadline - now);122	else123		msecs = 0;124 125unlock:126	spin_unlock_irq(ap->lock);127 128	return rc ? rc : sysfs_emit(buf, "%u\n", msecs);129}130 131static ssize_t ata_scsi_park_store(struct device *device,132				   struct device_attribute *attr,133				   const char *buf, size_t len)134{135	struct scsi_device *sdev = to_scsi_device(device);136	struct ata_port *ap;137	struct ata_device *dev;138	int input;139	unsigned long flags;140	int rc;141 142	rc = kstrtoint(buf, 10, &input);143	if (rc)144		return rc;145	if (input < -2)146		return -EINVAL;147	if (input > ATA_TMOUT_MAX_PARK) {148		rc = -EOVERFLOW;149		input = ATA_TMOUT_MAX_PARK;150	}151 152	ap = ata_shost_to_port(sdev->host);153 154	spin_lock_irqsave(ap->lock, flags);155	dev = ata_scsi_find_dev(ap, sdev);156	if (unlikely(!dev)) {157		rc = -ENODEV;158		goto unlock;159	}160	if (dev->class != ATA_DEV_ATA &&161	    dev->class != ATA_DEV_ZAC) {162		rc = -EOPNOTSUPP;163		goto unlock;164	}165 166	if (input >= 0) {167		if (dev->flags & ATA_DFLAG_NO_UNLOAD) {168			rc = -EOPNOTSUPP;169			goto unlock;170		}171 172		dev->unpark_deadline = ata_deadline(jiffies, input);173		dev->link->eh_info.dev_action[dev->devno] |= ATA_EH_PARK;174		ata_port_schedule_eh(ap);175		complete(&ap->park_req_pending);176	} else {177		switch (input) {178		case -1:179			dev->flags &= ~ATA_DFLAG_NO_UNLOAD;180			break;181		case -2:182			dev->flags |= ATA_DFLAG_NO_UNLOAD;183			break;184		}185	}186unlock:187	spin_unlock_irqrestore(ap->lock, flags);188 189	return rc ? rc : len;190}191DEVICE_ATTR(unload_heads, S_IRUGO | S_IWUSR,192	    ata_scsi_park_show, ata_scsi_park_store);193EXPORT_SYMBOL_GPL(dev_attr_unload_heads);194 195bool ata_scsi_sense_is_valid(u8 sk, u8 asc, u8 ascq)196{197	/*198	 * If sk == NO_SENSE, and asc + ascq == NO ADDITIONAL SENSE INFORMATION,199	 * then there is no sense data to add.200	 */201	if (sk == 0 && asc == 0 && ascq == 0)202		return false;203 204	/* If sk > COMPLETED, sense data is bogus. */205	if (sk > COMPLETED)206		return false;207 208	return true;209}210 211void ata_scsi_set_sense(struct ata_device *dev, struct scsi_cmnd *cmd,212			u8 sk, u8 asc, u8 ascq)213{214	bool d_sense = (dev->flags & ATA_DFLAG_D_SENSE);215 216	scsi_build_sense(cmd, d_sense, sk, asc, ascq);217}218 219void ata_scsi_set_sense_information(struct ata_device *dev,220				    struct scsi_cmnd *cmd,221				    const struct ata_taskfile *tf)222{223	u64 information;224 225	information = ata_tf_read_block(tf, dev);226	if (information == U64_MAX)227		return;228 229	scsi_set_sense_information(cmd->sense_buffer,230				   SCSI_SENSE_BUFFERSIZE, information);231}232 233/**234 *	ata_scsi_set_passthru_sense_fields - Set ATA fields in sense buffer235 *	@qc: ATA PASS-THROUGH command.236 *237 *	Populates "ATA Status Return sense data descriptor" / "Fixed format238 *	sense data" with ATA taskfile fields.239 *240 *	LOCKING:241 *	None.242 */243static void ata_scsi_set_passthru_sense_fields(struct ata_queued_cmd *qc)244{245	struct ata_device *dev = qc->dev;246	struct scsi_cmnd *cmd = qc->scsicmd;247	struct ata_taskfile *tf = &qc->result_tf;248	unsigned char *sb = cmd->sense_buffer;249 250	if (!(qc->flags & ATA_QCFLAG_RTF_FILLED)) {251		ata_dev_dbg(dev,252			    "missing result TF: can't set ATA PT sense fields\n");253		return;254	}255 256	if ((sb[0] & 0x7f) >= 0x72) {257		unsigned char *desc;258		u8 len;259 260		/* descriptor format */261		len = sb[7];262		desc = (char *)scsi_sense_desc_find(sb, len + 8, 9);263		if (!desc) {264			if (SCSI_SENSE_BUFFERSIZE < len + 14)265				return;266			sb[7] = len + 14;267			desc = sb + 8 + len;268		}269		desc[0] = 9;270		desc[1] = 12;271		/*272		 * Copy registers into sense buffer.273		 */274		desc[2] = 0x00;275		desc[3] = tf->error;276		desc[5] = tf->nsect;277		desc[7] = tf->lbal;278		desc[9] = tf->lbam;279		desc[11] = tf->lbah;280		desc[12] = tf->device;281		desc[13] = tf->status;282 283		/*284		 * Fill in Extend bit, and the high order bytes285		 * if applicable.286		 */287		if (tf->flags & ATA_TFLAG_LBA48) {288			desc[2] |= 0x01;289			desc[4] = tf->hob_nsect;290			desc[6] = tf->hob_lbal;291			desc[8] = tf->hob_lbam;292			desc[10] = tf->hob_lbah;293		}294	} else {295		/* Fixed sense format */296		sb[0] |= 0x80;297		sb[3] = tf->error;298		sb[4] = tf->status;299		sb[5] = tf->device;300		sb[6] = tf->nsect;301		if (tf->flags & ATA_TFLAG_LBA48)  {302			sb[8] |= 0x80;303			if (tf->hob_nsect)304				sb[8] |= 0x40;305			if (tf->hob_lbal || tf->hob_lbam || tf->hob_lbah)306				sb[8] |= 0x20;307		}308		sb[9] = tf->lbal;309		sb[10] = tf->lbam;310		sb[11] = tf->lbah;311	}312}313 314static void ata_scsi_set_invalid_field(struct ata_device *dev,315				       struct scsi_cmnd *cmd, u16 field, u8 bit)316{317	ata_scsi_set_sense(dev, cmd, ILLEGAL_REQUEST, 0x24, 0x0);318	/* "Invalid field in CDB" */319	scsi_set_sense_field_pointer(cmd->sense_buffer, SCSI_SENSE_BUFFERSIZE,320				     field, bit, 1);321}322 323static void ata_scsi_set_invalid_parameter(struct ata_device *dev,324					   struct scsi_cmnd *cmd, u16 field)325{326	/* "Invalid field in parameter list" */327	ata_scsi_set_sense(dev, cmd, ILLEGAL_REQUEST, 0x26, 0x0);328	scsi_set_sense_field_pointer(cmd->sense_buffer, SCSI_SENSE_BUFFERSIZE,329				     field, 0xff, 0);330}331 332static struct attribute *ata_common_sdev_attrs[] = {333	&dev_attr_unload_heads.attr,334	NULL335};336 337static const struct attribute_group ata_common_sdev_attr_group = {338	.attrs = ata_common_sdev_attrs339};340 341const struct attribute_group *ata_common_sdev_groups[] = {342	&ata_common_sdev_attr_group,343	NULL344};345EXPORT_SYMBOL_GPL(ata_common_sdev_groups);346 347/**348 *	ata_std_bios_param - generic bios head/sector/cylinder calculator used by sd.349 *	@sdev: SCSI device for which BIOS geometry is to be determined350 *	@bdev: block device associated with @sdev351 *	@capacity: capacity of SCSI device352 *	@geom: location to which geometry will be output353 *354 *	Generic bios head/sector/cylinder calculator355 *	used by sd. Most BIOSes nowadays expect a XXX/255/16  (CHS)356 *	mapping. Some situations may arise where the disk is not357 *	bootable if this is not used.358 *359 *	LOCKING:360 *	Defined by the SCSI layer.  We don't really care.361 *362 *	RETURNS:363 *	Zero.364 */365int ata_std_bios_param(struct scsi_device *sdev, struct block_device *bdev,366		       sector_t capacity, int geom[])367{368	geom[0] = 255;369	geom[1] = 63;370	sector_div(capacity, 255*63);371	geom[2] = capacity;372 373	return 0;374}375EXPORT_SYMBOL_GPL(ata_std_bios_param);376 377/**378 *	ata_scsi_unlock_native_capacity - unlock native capacity379 *	@sdev: SCSI device to adjust device capacity for380 *381 *	This function is called if a partition on @sdev extends beyond382 *	the end of the device.  It requests EH to unlock HPA.383 *384 *	LOCKING:385 *	Defined by the SCSI layer.  Might sleep.386 */387void ata_scsi_unlock_native_capacity(struct scsi_device *sdev)388{389	struct ata_port *ap = ata_shost_to_port(sdev->host);390	struct ata_device *dev;391	unsigned long flags;392 393	spin_lock_irqsave(ap->lock, flags);394 395	dev = ata_scsi_find_dev(ap, sdev);396	if (dev && dev->n_sectors < dev->n_native_sectors) {397		dev->flags |= ATA_DFLAG_UNLOCK_HPA;398		dev->link->eh_info.action |= ATA_EH_RESET;399		ata_port_schedule_eh(ap);400	}401 402	spin_unlock_irqrestore(ap->lock, flags);403	ata_port_wait_eh(ap);404}405EXPORT_SYMBOL_GPL(ata_scsi_unlock_native_capacity);406 407/**408 *	ata_get_identity - Handler for HDIO_GET_IDENTITY ioctl409 *	@ap: target port410 *	@sdev: SCSI device to get identify data for411 *	@arg: User buffer area for identify data412 *413 *	LOCKING:414 *	Defined by the SCSI layer.  We don't really care.415 *416 *	RETURNS:417 *	Zero on success, negative errno on error.418 */419static int ata_get_identity(struct ata_port *ap, struct scsi_device *sdev,420			    void __user *arg)421{422	struct ata_device *dev = ata_scsi_find_dev(ap, sdev);423	u16 __user *dst = arg;424	char buf[40];425 426	if (!dev)427		return -ENOMSG;428 429	if (copy_to_user(dst, dev->id, ATA_ID_WORDS * sizeof(u16)))430		return -EFAULT;431 432	ata_id_string(dev->id, buf, ATA_ID_PROD, ATA_ID_PROD_LEN);433	if (copy_to_user(dst + ATA_ID_PROD, buf, ATA_ID_PROD_LEN))434		return -EFAULT;435 436	ata_id_string(dev->id, buf, ATA_ID_FW_REV, ATA_ID_FW_REV_LEN);437	if (copy_to_user(dst + ATA_ID_FW_REV, buf, ATA_ID_FW_REV_LEN))438		return -EFAULT;439 440	ata_id_string(dev->id, buf, ATA_ID_SERNO, ATA_ID_SERNO_LEN);441	if (copy_to_user(dst + ATA_ID_SERNO, buf, ATA_ID_SERNO_LEN))442		return -EFAULT;443 444	return 0;445}446 447/**448 *	ata_cmd_ioctl - Handler for HDIO_DRIVE_CMD ioctl449 *	@scsidev: Device to which we are issuing command450 *	@arg: User provided data for issuing command451 *452 *	LOCKING:453 *	Defined by the SCSI layer.  We don't really care.454 *455 *	RETURNS:456 *	Zero on success, negative errno on error.457 */458int ata_cmd_ioctl(struct scsi_device *scsidev, void __user *arg)459{460	int rc = 0;461	u8 sensebuf[SCSI_SENSE_BUFFERSIZE];462	u8 scsi_cmd[MAX_COMMAND_SIZE];463	u8 args[4], *argbuf = NULL;464	int argsize = 0;465	struct scsi_sense_hdr sshdr;466	const struct scsi_exec_args exec_args = {467		.sshdr = &sshdr,468		.sense = sensebuf,469		.sense_len = sizeof(sensebuf),470	};471	int cmd_result;472 473	if (arg == NULL)474		return -EINVAL;475 476	if (copy_from_user(args, arg, sizeof(args)))477		return -EFAULT;478 479	memset(sensebuf, 0, sizeof(sensebuf));480	memset(scsi_cmd, 0, sizeof(scsi_cmd));481 482	if (args[3]) {483		argsize = ATA_SECT_SIZE * args[3];484		argbuf = kmalloc(argsize, GFP_KERNEL);485		if (argbuf == NULL) {486			rc = -ENOMEM;487			goto error;488		}489 490		scsi_cmd[1]  = (4 << 1); /* PIO Data-in */491		scsi_cmd[2]  = 0x0e;     /* no off.line or cc, read from dev,492					    block count in sector count field */493	} else {494		scsi_cmd[1]  = (3 << 1); /* Non-data */495		scsi_cmd[2]  = 0x20;     /* cc but no off.line or data xfer */496	}497 498	scsi_cmd[0] = ATA_16;499 500	scsi_cmd[4] = args[2];501	if (args[0] == ATA_CMD_SMART) { /* hack -- ide driver does this too */502		scsi_cmd[6]  = args[3];503		scsi_cmd[8]  = args[1];504		scsi_cmd[10] = ATA_SMART_LBAM_PASS;505		scsi_cmd[12] = ATA_SMART_LBAH_PASS;506	} else {507		scsi_cmd[6]  = args[1];508	}509	scsi_cmd[14] = args[0];510 511	/* Good values for timeout and retries?  Values below512	   from scsi_ioctl_send_command() for default case... */513	cmd_result = scsi_execute_cmd(scsidev, scsi_cmd, REQ_OP_DRV_IN, argbuf,514				      argsize, 10 * HZ, 5, &exec_args);515	if (cmd_result < 0) {516		rc = cmd_result;517		goto error;518	}519	if (scsi_sense_valid(&sshdr)) {/* sense data available */520		u8 *desc = sensebuf + 8;521 522		/* If we set cc then ATA pass-through will cause a523		 * check condition even if no error. Filter that. */524		if (scsi_status_is_check_condition(cmd_result)) {525			if (sshdr.sense_key == RECOVERED_ERROR &&526			    sshdr.asc == 0 && sshdr.ascq == 0x1d)527				cmd_result &= ~SAM_STAT_CHECK_CONDITION;528		}529 530		/* Send userspace a few ATA registers (same as drivers/ide) */531		if (sensebuf[0] == 0x72 &&	/* format is "descriptor" */532		    desc[0] == 0x09) {		/* code is "ATA Descriptor" */533			args[0] = desc[13];	/* status */534			args[1] = desc[3];	/* error */535			args[2] = desc[5];	/* sector count (0:7) */536			if (copy_to_user(arg, args, sizeof(args)))537				rc = -EFAULT;538		}539	}540 541 542	if (cmd_result) {543		rc = -EIO;544		goto error;545	}546 547	if ((argbuf)548	 && copy_to_user(arg + sizeof(args), argbuf, argsize))549		rc = -EFAULT;550error:551	kfree(argbuf);552	return rc;553}554 555/**556 *	ata_task_ioctl - Handler for HDIO_DRIVE_TASK ioctl557 *	@scsidev: Device to which we are issuing command558 *	@arg: User provided data for issuing command559 *560 *	LOCKING:561 *	Defined by the SCSI layer.  We don't really care.562 *563 *	RETURNS:564 *	Zero on success, negative errno on error.565 */566int ata_task_ioctl(struct scsi_device *scsidev, void __user *arg)567{568	int rc = 0;569	u8 sensebuf[SCSI_SENSE_BUFFERSIZE];570	u8 scsi_cmd[MAX_COMMAND_SIZE];571	u8 args[7];572	struct scsi_sense_hdr sshdr;573	int cmd_result;574	const struct scsi_exec_args exec_args = {575		.sshdr = &sshdr,576		.sense = sensebuf,577		.sense_len = sizeof(sensebuf),578	};579 580	if (arg == NULL)581		return -EINVAL;582 583	if (copy_from_user(args, arg, sizeof(args)))584		return -EFAULT;585 586	memset(sensebuf, 0, sizeof(sensebuf));587	memset(scsi_cmd, 0, sizeof(scsi_cmd));588	scsi_cmd[0]  = ATA_16;589	scsi_cmd[1]  = (3 << 1); /* Non-data */590	scsi_cmd[2]  = 0x20;     /* cc but no off.line or data xfer */591	scsi_cmd[4]  = args[1];592	scsi_cmd[6]  = args[2];593	scsi_cmd[8]  = args[3];594	scsi_cmd[10] = args[4];595	scsi_cmd[12] = args[5];596	scsi_cmd[13] = args[6] & 0x4f;597	scsi_cmd[14] = args[0];598 599	/* Good values for timeout and retries?  Values below600	   from scsi_ioctl_send_command() for default case... */601	cmd_result = scsi_execute_cmd(scsidev, scsi_cmd, REQ_OP_DRV_IN, NULL,602				      0, 10 * HZ, 5, &exec_args);603	if (cmd_result < 0) {604		rc = cmd_result;605		goto error;606	}607	if (scsi_sense_valid(&sshdr)) {/* sense data available */608		u8 *desc = sensebuf + 8;609 610		/* If we set cc then ATA pass-through will cause a611		 * check condition even if no error. Filter that. */612		if (cmd_result & SAM_STAT_CHECK_CONDITION) {613			if (sshdr.sense_key == RECOVERED_ERROR &&614			    sshdr.asc == 0 && sshdr.ascq == 0x1d)615				cmd_result &= ~SAM_STAT_CHECK_CONDITION;616		}617 618		/* Send userspace ATA registers */619		if (sensebuf[0] == 0x72 &&	/* format is "descriptor" */620				desc[0] == 0x09) {/* code is "ATA Descriptor" */621			args[0] = desc[13];	/* status */622			args[1] = desc[3];	/* error */623			args[2] = desc[5];	/* sector count (0:7) */624			args[3] = desc[7];	/* lbal */625			args[4] = desc[9];	/* lbam */626			args[5] = desc[11];	/* lbah */627			args[6] = desc[12];	/* select */628			if (copy_to_user(arg, args, sizeof(args)))629				rc = -EFAULT;630		}631	}632 633	if (cmd_result) {634		rc = -EIO;635		goto error;636	}637 638 error:639	return rc;640}641 642static bool ata_ioc32(struct ata_port *ap)643{644	if (ap->flags & ATA_FLAG_PIO_DMA)645		return true;646	if (ap->pflags & ATA_PFLAG_PIO32)647		return true;648	return false;649}650 651/*652 * This handles both native and compat commands, so anything added653 * here must have a compatible argument, or check in_compat_syscall()654 */655int ata_sas_scsi_ioctl(struct ata_port *ap, struct scsi_device *scsidev,656		     unsigned int cmd, void __user *arg)657{658	unsigned long val;659	int rc = -EINVAL;660	unsigned long flags;661 662	switch (cmd) {663	case HDIO_GET_32BIT:664		spin_lock_irqsave(ap->lock, flags);665		val = ata_ioc32(ap);666		spin_unlock_irqrestore(ap->lock, flags);667#ifdef CONFIG_COMPAT668		if (in_compat_syscall())669			return put_user(val, (compat_ulong_t __user *)arg);670#endif671		return put_user(val, (unsigned long __user *)arg);672 673	case HDIO_SET_32BIT:674		val = (unsigned long) arg;675		rc = 0;676		spin_lock_irqsave(ap->lock, flags);677		if (ap->pflags & ATA_PFLAG_PIO32CHANGE) {678			if (val)679				ap->pflags |= ATA_PFLAG_PIO32;680			else681				ap->pflags &= ~ATA_PFLAG_PIO32;682		} else {683			if (val != ata_ioc32(ap))684				rc = -EINVAL;685		}686		spin_unlock_irqrestore(ap->lock, flags);687		return rc;688 689	case HDIO_GET_IDENTITY:690		return ata_get_identity(ap, scsidev, arg);691 692	case HDIO_DRIVE_CMD:693		if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO))694			return -EACCES;695		return ata_cmd_ioctl(scsidev, arg);696 697	case HDIO_DRIVE_TASK:698		if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO))699			return -EACCES;700		return ata_task_ioctl(scsidev, arg);701 702	default:703		rc = -ENOTTY;704		break;705	}706 707	return rc;708}709EXPORT_SYMBOL_GPL(ata_sas_scsi_ioctl);710 711int ata_scsi_ioctl(struct scsi_device *scsidev, unsigned int cmd,712		   void __user *arg)713{714	return ata_sas_scsi_ioctl(ata_shost_to_port(scsidev->host),715				scsidev, cmd, arg);716}717EXPORT_SYMBOL_GPL(ata_scsi_ioctl);718 719/**720 *	ata_scsi_qc_new - acquire new ata_queued_cmd reference721 *	@dev: ATA device to which the new command is attached722 *	@cmd: SCSI command that originated this ATA command723 *724 *	Obtain a reference to an unused ata_queued_cmd structure,725 *	which is the basic libata structure representing a single726 *	ATA command sent to the hardware.727 *728 *	If a command was available, fill in the SCSI-specific729 *	portions of the structure with information on the730 *	current command.731 *732 *	LOCKING:733 *	spin_lock_irqsave(host lock)734 *735 *	RETURNS:736 *	Command allocated, or %NULL if none available.737 */738static struct ata_queued_cmd *ata_scsi_qc_new(struct ata_device *dev,739					      struct scsi_cmnd *cmd)740{741	struct ata_port *ap = dev->link->ap;742	struct ata_queued_cmd *qc;743	int tag;744 745	if (unlikely(ata_port_is_frozen(ap)))746		goto fail;747 748	if (ap->flags & ATA_FLAG_SAS_HOST) {749		/*750		 * SAS hosts may queue > ATA_MAX_QUEUE commands so use751		 * unique per-device budget token as a tag.752		 */753		if (WARN_ON_ONCE(cmd->budget_token >= ATA_MAX_QUEUE))754			goto fail;755		tag = cmd->budget_token;756	} else {757		tag = scsi_cmd_to_rq(cmd)->tag;758	}759 760	qc = __ata_qc_from_tag(ap, tag);761	qc->tag = qc->hw_tag = tag;762	qc->ap = ap;763	qc->dev = dev;764 765	ata_qc_reinit(qc);766 767	qc->scsicmd = cmd;768	qc->scsidone = scsi_done;769 770	qc->sg = scsi_sglist(cmd);771	qc->n_elem = scsi_sg_count(cmd);772 773	if (scsi_cmd_to_rq(cmd)->rq_flags & RQF_QUIET)774		qc->flags |= ATA_QCFLAG_QUIET;775 776	return qc;777 778fail:779	set_host_byte(cmd, DID_OK);780	set_status_byte(cmd, SAM_STAT_TASK_SET_FULL);781	scsi_done(cmd);782	return NULL;783}784 785static void ata_qc_set_pc_nbytes(struct ata_queued_cmd *qc)786{787	struct scsi_cmnd *scmd = qc->scsicmd;788 789	qc->extrabytes = scmd->extra_len;790	qc->nbytes = scsi_bufflen(scmd) + qc->extrabytes;791}792 793/**794 *	ata_to_sense_error - convert ATA error to SCSI error795 *	@drv_stat: value contained in ATA status register796 *	@drv_err: value contained in ATA error register797 *	@sk: the sense key we'll fill out798 *	@asc: the additional sense code we'll fill out799 *	@ascq: the additional sense code qualifier we'll fill out800 *801 *	Converts an ATA error into a SCSI error.  Fill out pointers to802 *	SK, ASC, and ASCQ bytes for later use in fixed or descriptor803 *	format sense blocks.804 *805 *	LOCKING:806 *	spin_lock_irqsave(host lock)807 */808static void ata_to_sense_error(u8 drv_stat, u8 drv_err, u8 *sk, u8 *asc,809			       u8 *ascq)810{811	int i;812 813	/* Based on the 3ware driver translation table */814	static const unsigned char sense_table[][4] = {815		/* BBD|ECC|ID|MAR */816		{0xd1,		ABORTED_COMMAND, 0x00, 0x00},817			// Device busy                  Aborted command818		/* BBD|ECC|ID */819		{0xd0,		ABORTED_COMMAND, 0x00, 0x00},820			// Device busy                  Aborted command821		/* ECC|MC|MARK */822		{0x61,		HARDWARE_ERROR, 0x00, 0x00},823			// Device fault                 Hardware error824		/* ICRC|ABRT */		/* NB: ICRC & !ABRT is BBD */825		{0x84,		ABORTED_COMMAND, 0x47, 0x00},826			// Data CRC error               SCSI parity error827		/* MC|ID|ABRT|TRK0|MARK */828		{0x37,		NOT_READY, 0x04, 0x00},829			// Unit offline                 Not ready830		/* MCR|MARK */831		{0x09,		NOT_READY, 0x04, 0x00},832			// Unrecovered disk error       Not ready833		/*  Bad address mark */834		{0x01,		MEDIUM_ERROR, 0x13, 0x00},835			// Address mark not found for data field836		/* TRK0 - Track 0 not found */837		{0x02,		HARDWARE_ERROR, 0x00, 0x00},838			// Hardware error839		/* Abort: 0x04 is not translated here, see below */840		/* Media change request */841		{0x08,		NOT_READY, 0x04, 0x00},842			// FIXME: faking offline843		/* SRV/IDNF - ID not found */844		{0x10,		ILLEGAL_REQUEST, 0x21, 0x00},845			// Logical address out of range846		/* MC - Media Changed */847		{0x20,		UNIT_ATTENTION, 0x28, 0x00},848			// Not ready to ready change, medium may have changed849		/* ECC - Uncorrectable ECC error */850		{0x40,		MEDIUM_ERROR, 0x11, 0x04},851			// Unrecovered read error852		/* BBD - block marked bad */853		{0x80,		MEDIUM_ERROR, 0x11, 0x04},854			// Block marked bad	Medium error, unrecovered read error855		{0xFF, 0xFF, 0xFF, 0xFF}, // END mark856	};857	static const unsigned char stat_table[][4] = {858		/* Must be first because BUSY means no other bits valid */859		{0x80,		ABORTED_COMMAND, 0x47, 0x00},860		// Busy, fake parity for now861		{0x40,		ILLEGAL_REQUEST, 0x21, 0x04},862		// Device ready, unaligned write command863		{0x20,		HARDWARE_ERROR,  0x44, 0x00},864		// Device fault, internal target failure865		{0x08,		ABORTED_COMMAND, 0x47, 0x00},866		// Timed out in xfer, fake parity for now867		{0x04,		RECOVERED_ERROR, 0x11, 0x00},868		// Recovered ECC error	  Medium error, recovered869		{0xFF, 0xFF, 0xFF, 0xFF}, // END mark870	};871 872	/*873	 *	Is this an error we can process/parse874	 */875	if (drv_stat & ATA_BUSY) {876		drv_err = 0;	/* Ignore the err bits, they're invalid */877	}878 879	if (drv_err) {880		/* Look for drv_err */881		for (i = 0; sense_table[i][0] != 0xFF; i++) {882			/* Look for best matches first */883			if ((sense_table[i][0] & drv_err) ==884			    sense_table[i][0]) {885				*sk = sense_table[i][1];886				*asc = sense_table[i][2];887				*ascq = sense_table[i][3];888				return;889			}890		}891	}892 893	/*894	 * Fall back to interpreting status bits.  Note that if the drv_err895	 * has only the ABRT bit set, we decode drv_stat.  ABRT by itself896	 * is not descriptive enough.897	 */898	for (i = 0; stat_table[i][0] != 0xFF; i++) {899		if (stat_table[i][0] & drv_stat) {900			*sk = stat_table[i][1];901			*asc = stat_table[i][2];902			*ascq = stat_table[i][3];903			return;904		}905	}906 907	/*908	 * We need a sensible error return here, which is tricky, and one909	 * that won't cause people to do things like return a disk wrongly.910	 */911	*sk = ABORTED_COMMAND;912	*asc = 0x00;913	*ascq = 0x00;914}915 916/*917 *	ata_gen_passthru_sense - Generate check condition sense block.918 *	@qc: Command that completed.919 *920 *	This function is specific to the ATA pass through commands.921 *	Regardless of whether the command errored or not, return a sense922 *	block. If there was no error, we get the request from an ATA923 *	passthrough command, so we use the following sense data:924 *	sk = RECOVERED ERROR925 *	asc,ascq = ATA PASS-THROUGH INFORMATION AVAILABLE926 *      927 *928 *	LOCKING:929 *	None.930 */931static void ata_gen_passthru_sense(struct ata_queued_cmd *qc)932{933	struct ata_device *dev = qc->dev;934	struct scsi_cmnd *cmd = qc->scsicmd;935	struct ata_taskfile *tf = &qc->result_tf;936	u8 sense_key, asc, ascq;937 938	if (!(qc->flags & ATA_QCFLAG_RTF_FILLED)) {939		ata_dev_dbg(dev,940			    "missing result TF: can't generate ATA PT sense data\n");941		return;942	}943 944	/*945	 * Use ata_to_sense_error() to map status register bits946	 * onto sense key, asc & ascq.947	 */948	if (qc->err_mask ||949	    tf->status & (ATA_BUSY | ATA_DF | ATA_ERR | ATA_DRQ)) {950		ata_to_sense_error(tf->status, tf->error,951				   &sense_key, &asc, &ascq);952		ata_scsi_set_sense(qc->dev, cmd, sense_key, asc, ascq);953	} else {954		/*955		 * ATA PASS-THROUGH INFORMATION AVAILABLE956		 *957		 * Note: we are supposed to call ata_scsi_set_sense(), which958		 * respects the D_SENSE bit, instead of unconditionally959		 * generating the sense data in descriptor format. However,960		 * because hdparm, hddtemp, and udisks incorrectly assume sense961		 * data in descriptor format, without even looking at the962		 * RESPONSE CODE field in the returned sense data (to see which963		 * format the returned sense data is in), we are stuck with964		 * being bug compatible with older kernels.965		 */966		scsi_build_sense(cmd, 1, RECOVERED_ERROR, 0, 0x1D);967	}968}969 970/**971 *	ata_gen_ata_sense - generate a SCSI fixed sense block972 *	@qc: Command that we are erroring out973 *974 *	Generate sense block for a failed ATA command @qc.  Descriptor975 *	format is used to accommodate LBA48 block address.976 *977 *	LOCKING:978 *	None.979 */980static void ata_gen_ata_sense(struct ata_queued_cmd *qc)981{982	struct ata_device *dev = qc->dev;983	struct scsi_cmnd *cmd = qc->scsicmd;984	struct ata_taskfile *tf = &qc->result_tf;985	unsigned char *sb = cmd->sense_buffer;986	u64 block;987	u8 sense_key, asc, ascq;988 989	if (ata_dev_disabled(dev)) {990		/* Device disabled after error recovery */991		/* LOGICAL UNIT NOT READY, HARD RESET REQUIRED */992		ata_scsi_set_sense(dev, cmd, NOT_READY, 0x04, 0x21);993		return;994	}995 996	if (!(qc->flags & ATA_QCFLAG_RTF_FILLED)) {997		ata_dev_dbg(dev,998			    "missing result TF: can't generate sense data\n");999		return;1000	}1001 1002	/* Use ata_to_sense_error() to map status register bits1003	 * onto sense key, asc & ascq.1004	 */1005	if (qc->err_mask ||1006	    tf->status & (ATA_BUSY | ATA_DF | ATA_ERR | ATA_DRQ)) {1007		ata_to_sense_error(tf->status, tf->error,1008				   &sense_key, &asc, &ascq);1009		ata_scsi_set_sense(dev, cmd, sense_key, asc, ascq);1010	} else {1011		/* Could not decode error */1012		ata_dev_warn(dev, "could not decode error status 0x%x err_mask 0x%x\n",1013			     tf->status, qc->err_mask);1014		ata_scsi_set_sense(dev, cmd, ABORTED_COMMAND, 0, 0);1015		return;1016	}1017 1018	block = ata_tf_read_block(&qc->result_tf, dev);1019	if (block == U64_MAX)1020		return;1021 1022	scsi_set_sense_information(sb, SCSI_SENSE_BUFFERSIZE, block);1023}1024 1025void ata_scsi_sdev_config(struct scsi_device *sdev)1026{1027	sdev->use_10_for_rw = 1;1028	sdev->use_10_for_ms = 1;1029	sdev->no_write_same = 1;1030 1031	/* Schedule policy is determined by ->qc_defer() callback and1032	 * it needs to see every deferred qc.  Set dev_blocked to 1 to1033	 * prevent SCSI midlayer from automatically deferring1034	 * requests.1035	 */1036	sdev->max_device_blocked = 1;1037}1038 1039/**1040 *	ata_scsi_dma_need_drain - Check whether data transfer may overflow1041 *	@rq: request to be checked1042 *1043 *	ATAPI commands which transfer variable length data to host1044 *	might overflow due to application error or hardware bug.  This1045 *	function checks whether overflow should be drained and ignored1046 *	for @request.1047 *1048 *	LOCKING:1049 *	None.1050 *1051 *	RETURNS:1052 *	1 if ; otherwise, 0.1053 */1054bool ata_scsi_dma_need_drain(struct request *rq)1055{1056	struct scsi_cmnd *scmd = blk_mq_rq_to_pdu(rq);1057 1058	return atapi_cmd_type(scmd->cmnd[0]) == ATAPI_MISC;1059}1060EXPORT_SYMBOL_GPL(ata_scsi_dma_need_drain);1061 1062int ata_scsi_dev_config(struct scsi_device *sdev, struct queue_limits *lim,1063		struct ata_device *dev)1064{1065	int depth = 1;1066 1067	if (!ata_id_has_unload(dev->id))1068		dev->flags |= ATA_DFLAG_NO_UNLOAD;1069 1070	/* configure max sectors */1071	dev->max_sectors = min(dev->max_sectors, sdev->host->max_sectors);1072	lim->max_hw_sectors = dev->max_sectors;1073 1074	if (dev->class == ATA_DEV_ATAPI) {1075		sdev->sector_size = ATA_SECT_SIZE;1076 1077		/* set DMA padding */1078		lim->dma_pad_mask = ATA_DMA_PAD_SZ - 1;1079 1080		/* make room for appending the drain */1081		lim->max_segments--;1082 1083		sdev->dma_drain_len = ATAPI_MAX_DRAIN;1084		sdev->dma_drain_buf = kmalloc(sdev->dma_drain_len, GFP_NOIO);1085		if (!sdev->dma_drain_buf) {1086			ata_dev_err(dev, "drain buffer allocation failed\n");1087			return -ENOMEM;1088		}1089	} else {1090		sdev->sector_size = ata_id_logical_sector_size(dev->id);1091 1092		/*1093		 * Ask the sd driver to issue START STOP UNIT on runtime suspend1094		 * and resume and shutdown only. For system level suspend/resume,1095		 * devices power state is handled directly by libata EH.1096		 * Given that disks are always spun up on system resume, also1097		 * make sure that the sd driver forces runtime suspended disks1098		 * to be resumed to correctly reflect the power state of the1099		 * device.1100		 */1101		sdev->manage_runtime_start_stop = 1;1102		sdev->manage_shutdown = 1;1103		sdev->force_runtime_start_on_system_start = 1;1104	}1105 1106	/*1107	 * ata_pio_sectors() expects buffer for each sector to not cross1108	 * page boundary.  Enforce it by requiring buffers to be sector1109	 * aligned, which works iff sector_size is not larger than1110	 * PAGE_SIZE.  ATAPI devices also need the alignment as1111	 * IDENTIFY_PACKET is executed as ATA_PROT_PIO.1112	 */1113	if (sdev->sector_size > PAGE_SIZE)1114		ata_dev_warn(dev,1115			"sector_size=%u > PAGE_SIZE, PIO may malfunction\n",1116			sdev->sector_size);1117 1118	lim->dma_alignment = sdev->sector_size - 1;1119 1120	if (dev->flags & ATA_DFLAG_AN)1121		set_bit(SDEV_EVT_MEDIA_CHANGE, sdev->supported_events);1122 1123	if (ata_ncq_supported(dev))1124		depth = min(sdev->host->can_queue, ata_id_queue_depth(dev->id));1125	depth = min(ATA_MAX_QUEUE, depth);1126	scsi_change_queue_depth(sdev, depth);1127 1128	if (dev->flags & ATA_DFLAG_TRUSTED)1129		sdev->security_supported = 1;1130 1131	dev->sdev = sdev;1132	return 0;1133}1134 1135/**1136 *	ata_scsi_slave_alloc - Early setup of SCSI device1137 *	@sdev: SCSI device to examine1138 *1139 *	This is called from scsi_alloc_sdev() when the scsi device1140 *	associated with an ATA device is scanned on a port.1141 *1142 *	LOCKING:1143 *	Defined by SCSI layer.  We don't really care.1144 */1145 1146int ata_scsi_slave_alloc(struct scsi_device *sdev)1147{1148	struct ata_port *ap = ata_shost_to_port(sdev->host);1149	struct device_link *link;1150 1151	ata_scsi_sdev_config(sdev);1152 1153	/*1154	 * Create a link from the ata_port device to the scsi device to ensure1155	 * that PM does suspend/resume in the correct order: the scsi device is1156	 * consumer (child) and the ata port the supplier (parent).1157	 */1158	link = device_link_add(&sdev->sdev_gendev, &ap->tdev,1159			       DL_FLAG_STATELESS |1160			       DL_FLAG_PM_RUNTIME | DL_FLAG_RPM_ACTIVE);1161	if (!link) {1162		ata_port_err(ap, "Failed to create link to scsi device %s\n",1163			     dev_name(&sdev->sdev_gendev));1164		return -ENODEV;1165	}1166 1167	return 0;1168}1169EXPORT_SYMBOL_GPL(ata_scsi_slave_alloc);1170 1171/**1172 *	ata_scsi_device_configure - Set SCSI device attributes1173 *	@sdev: SCSI device to examine1174 *	@lim: queue limits1175 *1176 *	This is called before we actually start reading1177 *	and writing to the device, to configure certain1178 *	SCSI mid-layer behaviors.1179 *1180 *	LOCKING:1181 *	Defined by SCSI layer.  We don't really care.1182 */1183 1184int ata_scsi_device_configure(struct scsi_device *sdev,1185		struct queue_limits *lim)1186{1187	struct ata_port *ap = ata_shost_to_port(sdev->host);1188	struct ata_device *dev = __ata_scsi_find_dev(ap, sdev);1189 1190	if (dev)1191		return ata_scsi_dev_config(sdev, lim, dev);1192 1193	return 0;1194}1195EXPORT_SYMBOL_GPL(ata_scsi_device_configure);1196 1197/**1198 *	ata_scsi_slave_destroy - SCSI device is about to be destroyed1199 *	@sdev: SCSI device to be destroyed1200 *1201 *	@sdev is about to be destroyed for hot/warm unplugging.  If1202 *	this unplugging was initiated by libata as indicated by NULL1203 *	dev->sdev, this function doesn't have to do anything.1204 *	Otherwise, SCSI layer initiated warm-unplug is in progress.1205 *	Clear dev->sdev, schedule the device for ATA detach and invoke1206 *	EH.1207 *1208 *	LOCKING:1209 *	Defined by SCSI layer.  We don't really care.1210 */1211void ata_scsi_slave_destroy(struct scsi_device *sdev)1212{1213	struct ata_port *ap = ata_shost_to_port(sdev->host);1214	unsigned long flags;1215	struct ata_device *dev;1216 1217	device_link_remove(&sdev->sdev_gendev, &ap->tdev);1218 1219	spin_lock_irqsave(ap->lock, flags);1220	dev = __ata_scsi_find_dev(ap, sdev);1221	if (dev && dev->sdev) {1222		/* SCSI device already in CANCEL state, no need to offline it */1223		dev->sdev = NULL;1224		dev->flags |= ATA_DFLAG_DETACH;1225		ata_port_schedule_eh(ap);1226	}1227	spin_unlock_irqrestore(ap->lock, flags);1228 1229	kfree(sdev->dma_drain_buf);1230}1231EXPORT_SYMBOL_GPL(ata_scsi_slave_destroy);1232 1233/**1234 *	ata_scsi_start_stop_xlat - Translate SCSI START STOP UNIT command1235 *	@qc: Storage for translated ATA taskfile1236 *1237 *	Sets up an ATA taskfile to issue STANDBY (to stop) or READ VERIFY1238 *	(to start). Perhaps these commands should be preceded by1239 *	CHECK POWER MODE to see what power mode the device is already in.1240 *	[See SAT revision 5 at www.t10.org]1241 *1242 *	LOCKING:1243 *	spin_lock_irqsave(host lock)1244 *1245 *	RETURNS:1246 *	Zero on success, non-zero on error.1247 */1248static unsigned int ata_scsi_start_stop_xlat(struct ata_queued_cmd *qc)1249{1250	struct scsi_cmnd *scmd = qc->scsicmd;1251	const u8 *cdb = scmd->cmnd;1252	u16 fp;1253	u8 bp = 0xff;1254 1255	if (scmd->cmd_len < 5) {1256		fp = 4;1257		goto invalid_fld;1258	}1259 1260	/* LOEJ bit set not supported */1261	if (cdb[4] & 0x2) {1262		fp = 4;1263		bp = 1;1264		goto invalid_fld;1265	}1266 1267	/* Power conditions not supported */1268	if (((cdb[4] >> 4) & 0xf) != 0) {1269		fp = 4;1270		bp = 3;1271		goto invalid_fld;1272	}1273 1274	/* Ignore IMMED bit (cdb[1] & 0x1), violates sat-r05 */1275	if (!ata_dev_power_init_tf(qc->dev, &qc->tf, cdb[4] & 0x1)) {1276		ata_scsi_set_sense(qc->dev, scmd, ABORTED_COMMAND, 0, 0);1277		return 1;1278	}1279 1280	/*1281	 * Standby and Idle condition timers could be implemented but that1282	 * would require libata to implement the Power condition mode page1283	 * and allow the user to change it. Changing mode pages requires1284	 * MODE SELECT to be implemented.1285	 */1286 1287	return 0;1288 1289 invalid_fld:1290	ata_scsi_set_invalid_field(qc->dev, scmd, fp, bp);1291	return 1;1292}1293 1294/**1295 *	ata_scsi_flush_xlat - Translate SCSI SYNCHRONIZE CACHE command1296 *	@qc: Storage for translated ATA taskfile1297 *1298 *	Sets up an ATA taskfile to issue FLUSH CACHE or1299 *	FLUSH CACHE EXT.1300 *1301 *	LOCKING:1302 *	spin_lock_irqsave(host lock)1303 *1304 *	RETURNS:1305 *	Zero on success, non-zero on error.1306 */1307static unsigned int ata_scsi_flush_xlat(struct ata_queued_cmd *qc)1308{1309	struct ata_taskfile *tf = &qc->tf;1310 1311	tf->flags |= ATA_TFLAG_DEVICE;1312	tf->protocol = ATA_PROT_NODATA;1313 1314	if (qc->dev->flags & ATA_DFLAG_FLUSH_EXT)1315		tf->command = ATA_CMD_FLUSH_EXT;1316	else1317		tf->command = ATA_CMD_FLUSH;1318 1319	/* flush is critical for IO integrity, consider it an IO command */1320	qc->flags |= ATA_QCFLAG_IO;1321 1322	return 0;1323}1324 1325/**1326 *	scsi_6_lba_len - Get LBA and transfer length1327 *	@cdb: SCSI command to translate1328 *1329 *	Calculate LBA and transfer length for 6-byte commands.1330 *1331 *	RETURNS:1332 *	@plba: the LBA1333 *	@plen: the transfer length1334 */1335static void scsi_6_lba_len(const u8 *cdb, u64 *plba, u32 *plen)1336{1337	u64 lba = 0;1338	u32 len;1339 1340	lba |= ((u64)(cdb[1] & 0x1f)) << 16;1341	lba |= ((u64)cdb[2]) << 8;1342	lba |= ((u64)cdb[3]);1343 1344	len = cdb[4];1345 1346	*plba = lba;1347	*plen = len;1348}1349 1350/**1351 *	scsi_10_lba_len - Get LBA and transfer length1352 *	@cdb: SCSI command to translate1353 *1354 *	Calculate LBA and transfer length for 10-byte commands.1355 *1356 *	RETURNS:1357 *	@plba: the LBA1358 *	@plen: the transfer length1359 */1360static inline void scsi_10_lba_len(const u8 *cdb, u64 *plba, u32 *plen)1361{1362	*plba = get_unaligned_be32(&cdb[2]);1363	*plen = get_unaligned_be16(&cdb[7]);1364}1365 1366/**1367 *	scsi_16_lba_len - Get LBA and transfer length1368 *	@cdb: SCSI command to translate1369 *1370 *	Calculate LBA and transfer length for 16-byte commands.1371 *1372 *	RETURNS:1373 *	@plba: the LBA1374 *	@plen: the transfer length1375 */1376static inline void scsi_16_lba_len(const u8 *cdb, u64 *plba, u32 *plen)1377{1378	*plba = get_unaligned_be64(&cdb[2]);1379	*plen = get_unaligned_be32(&cdb[10]);1380}1381 1382/**1383 *	scsi_dld - Get duration limit descriptor index1384 *	@cdb: SCSI command to translate1385 *1386 *	Returns the dld bits indicating the index of a command duration limit1387 *	descriptor.1388 */1389static inline int scsi_dld(const u8 *cdb)1390{1391	return ((cdb[1] & 0x01) << 2) | ((cdb[14] >> 6) & 0x03);1392}1393 1394/**1395 *	ata_scsi_verify_xlat - Translate SCSI VERIFY command into an ATA one1396 *	@qc: Storage for translated ATA taskfile1397 *1398 *	Converts SCSI VERIFY command to an ATA READ VERIFY command.1399 *1400 *	LOCKING:1401 *	spin_lock_irqsave(host lock)1402 *1403 *	RETURNS:1404 *	Zero on success, non-zero on error.1405 */1406static unsigned int ata_scsi_verify_xlat(struct ata_queued_cmd *qc)1407{1408	struct scsi_cmnd *scmd = qc->scsicmd;1409	struct ata_taskfile *tf = &qc->tf;1410	struct ata_device *dev = qc->dev;1411	u64 dev_sectors = qc->dev->n_sectors;1412	const u8 *cdb = scmd->cmnd;1413	u64 block;1414	u32 n_block;1415	u16 fp;1416 1417	tf->flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;1418	tf->protocol = ATA_PROT_NODATA;1419 1420	switch (cdb[0]) {1421	case VERIFY:1422		if (scmd->cmd_len < 10) {1423			fp = 9;1424			goto invalid_fld;1425		}1426		scsi_10_lba_len(cdb, &block, &n_block);1427		break;1428	case VERIFY_16:1429		if (scmd->cmd_len < 16) {1430			fp = 15;1431			goto invalid_fld;1432		}1433		scsi_16_lba_len(cdb, &block, &n_block);1434		break;1435	default:1436		fp = 0;1437		goto invalid_fld;1438	}1439 1440	if (!n_block)1441		goto nothing_to_do;1442	if (block >= dev_sectors)1443		goto out_of_range;1444	if ((block + n_block) > dev_sectors)1445		goto out_of_range;1446 1447	if (dev->flags & ATA_DFLAG_LBA) {1448		tf->flags |= ATA_TFLAG_LBA;1449 1450		if (lba_28_ok(block, n_block)) {1451			/* use LBA28 */1452			tf->command = ATA_CMD_VERIFY;1453			tf->device |= (block >> 24) & 0xf;1454		} else if (lba_48_ok(block, n_block)) {1455			if (!(dev->flags & ATA_DFLAG_LBA48))1456				goto out_of_range;1457 1458			/* use LBA48 */1459			tf->flags |= ATA_TFLAG_LBA48;1460			tf->command = ATA_CMD_VERIFY_EXT;1461 1462			tf->hob_nsect = (n_block >> 8) & 0xff;1463 1464			tf->hob_lbah = (block >> 40) & 0xff;1465			tf->hob_lbam = (block >> 32) & 0xff;1466			tf->hob_lbal = (block >> 24) & 0xff;1467		} else1468			/* request too large even for LBA48 */1469			goto out_of_range;1470 1471		tf->nsect = n_block & 0xff;1472 1473		tf->lbah = (block >> 16) & 0xff;1474		tf->lbam = (block >> 8) & 0xff;1475		tf->lbal = block & 0xff;1476 1477		tf->device |= ATA_LBA;1478	} else {1479		/* CHS */1480		u32 sect, head, cyl, track;1481 1482		if (!lba_28_ok(block, n_block))1483			goto out_of_range;1484 1485		/* Convert LBA to CHS */1486		track = (u32)block / dev->sectors;1487		cyl   = track / dev->heads;1488		head  = track % dev->heads;1489		sect  = (u32)block % dev->sectors + 1;1490 1491		/* Check whether the converted CHS can fit.1492		   Cylinder: 0-655351493		   Head: 0-151494		   Sector: 1-255*/1495		if ((cyl >> 16) || (head >> 4) || (sect >> 8) || (!sect))1496			goto out_of_range;1497 1498		tf->command = ATA_CMD_VERIFY;1499		tf->nsect = n_block & 0xff; /* Sector count 0 means 256 sectors */1500		tf->lbal = sect;1501		tf->lbam = cyl;1502		tf->lbah = cyl >> 8;1503		tf->device |= head;1504	}1505 1506	return 0;1507 1508invalid_fld:1509	ata_scsi_set_invalid_field(qc->dev, scmd, fp, 0xff);1510	return 1;1511 1512out_of_range:1513	ata_scsi_set_sense(qc->dev, scmd, ILLEGAL_REQUEST, 0x21, 0x0);1514	/* "Logical Block Address out of range" */1515	return 1;1516 1517nothing_to_do:1518	scmd->result = SAM_STAT_GOOD;1519	return 1;1520}1521 1522static bool ata_check_nblocks(struct scsi_cmnd *scmd, u32 n_blocks)1523{1524	struct request *rq = scsi_cmd_to_rq(scmd);1525	u32 req_blocks;1526 1527	if (!blk_rq_is_passthrough(rq))1528		return true;1529 1530	req_blocks = blk_rq_bytes(rq) / scmd->device->sector_size;1531	if (n_blocks > req_blocks)1532		return false;1533 1534	return true;1535}1536 1537/**1538 *	ata_scsi_rw_xlat - Translate SCSI r/w command into an ATA one1539 *	@qc: Storage for translated ATA taskfile1540 *1541 *	Converts any of six SCSI read/write commands into the1542 *	ATA counterpart, including starting sector (LBA),1543 *	sector count, and taking into account the device's LBA481544 *	support.1545 *1546 *	Commands %READ_6, %READ_10, %READ_16, %WRITE_6, %WRITE_10, and1547 *	%WRITE_16 are currently supported.1548 *1549 *	LOCKING:1550 *	spin_lock_irqsave(host lock)1551 *1552 *	RETURNS:1553 *	Zero on success, non-zero on error.1554 */1555static unsigned int ata_scsi_rw_xlat(struct ata_queued_cmd *qc)1556{1557	struct scsi_cmnd *scmd = qc->scsicmd;1558	const u8 *cdb = scmd->cmnd;1559	struct request *rq = scsi_cmd_to_rq(scmd);1560	int class = IOPRIO_PRIO_CLASS(req_get_ioprio(rq));1561	unsigned int tf_flags = 0;1562	int dld = 0;1563	u64 block;1564	u32 n_block;1565	int rc;1566	u16 fp = 0;1567 1568	switch (cdb[0]) {1569	case WRITE_6:1570	case WRITE_10:1571	case WRITE_16:1572		tf_flags |= ATA_TFLAG_WRITE;1573		break;1574	}1575 1576	/* Calculate the SCSI LBA, transfer length and FUA. */1577	switch (cdb[0]) {1578	case READ_10:1579	case WRITE_10:1580		if (unlikely(scmd->cmd_len < 10)) {1581			fp = 9;1582			goto invalid_fld;1583		}1584		scsi_10_lba_len(cdb, &block, &n_block);1585		if (cdb[1] & (1 << 3))1586			tf_flags |= ATA_TFLAG_FUA;1587		if (!ata_check_nblocks(scmd, n_block))1588			goto invalid_fld;1589		break;1590	case READ_6:1591	case WRITE_6:1592		if (unlikely(scmd->cmd_len < 6)) {1593			fp = 5;1594			goto invalid_fld;1595		}1596		scsi_6_lba_len(cdb, &block, &n_block);1597 1598		/* for 6-byte r/w commands, transfer length 01599		 * means 256 blocks of data, not 0 block.1600		 */1601		if (!n_block)1602			n_block = 256;1603		if (!ata_check_nblocks(scmd, n_block))1604			goto invalid_fld;1605		break;1606	case READ_16:1607	case WRITE_16:1608		if (unlikely(scmd->cmd_len < 16)) {1609			fp = 15;1610			goto invalid_fld;1611		}1612		scsi_16_lba_len(cdb, &block, &n_block);1613		dld = scsi_dld(cdb);1614		if (cdb[1] & (1 << 3))1615			tf_flags |= ATA_TFLAG_FUA;1616		if (!ata_check_nblocks(scmd, n_block))1617			goto invalid_fld;1618		break;1619	default:1620		fp = 0;1621		goto invalid_fld;1622	}1623 1624	/* Check and compose ATA command */1625	if (!n_block)1626		/* For 10-byte and 16-byte SCSI R/W commands, transfer1627		 * length 0 means transfer 0 block of data.1628		 * However, for ATA R/W commands, sector count 0 means1629		 * 256 or 65536 sectors, not 0 sectors as in SCSI.1630		 *1631		 * WARNING: one or two older ATA drives treat 0 as 0...1632		 */1633		goto nothing_to_do;1634 1635	qc->flags |= ATA_QCFLAG_IO;1636	qc->nbytes = n_block * scmd->device->sector_size;1637 1638	rc = ata_build_rw_tf(qc, block, n_block, tf_flags, dld, class);1639	if (likely(rc == 0))1640		return 0;1641 1642	if (rc == -ERANGE)1643		goto out_of_range;1644	/* treat all other errors as -EINVAL, fall through */1645invalid_fld:1646	ata_scsi_set_invalid_field(qc->dev, scmd, fp, 0xff);1647	return 1;1648 1649out_of_range:1650	ata_scsi_set_sense(qc->dev, scmd, ILLEGAL_REQUEST, 0x21, 0x0);1651	/* "Logical Block Address out of range" */1652	return 1;1653 1654nothing_to_do:1655	scmd->result = SAM_STAT_GOOD;1656	return 1;1657}1658 1659static void ata_qc_done(struct ata_queued_cmd *qc)1660{1661	struct scsi_cmnd *cmd = qc->scsicmd;1662	void (*done)(struct scsi_cmnd *) = qc->scsidone;1663 1664	ata_qc_free(qc);1665	done(cmd);1666}1667 1668static void ata_scsi_qc_complete(struct ata_queued_cmd *qc)1669{1670	struct scsi_cmnd *cmd = qc->scsicmd;1671	u8 *cdb = cmd->cmnd;1672	bool have_sense = qc->flags & ATA_QCFLAG_SENSE_VALID;1673	bool is_ata_passthru = cdb[0] == ATA_16 || cdb[0] == ATA_12;1674	bool is_ck_cond_request = cdb[2] & 0x20;1675	bool is_error = qc->err_mask != 0;1676 1677	/* For ATA pass thru (SAT) commands, generate a sense block if1678	 * user mandated it or if there's an error.  Note that if we1679	 * generate because the user forced us to [CK_COND=1], a check1680	 * condition is generated and the ATA register values are returned1681	 * whether the command completed successfully or not. If there1682	 * was no error, and CK_COND=1, we use the following sense data:1683	 * sk = RECOVERED ERROR1684	 * asc,ascq = ATA PASS-THROUGH INFORMATION AVAILABLE1685	 */1686	if (is_ata_passthru && (is_ck_cond_request || is_error || have_sense)) {1687		if (!have_sense)1688			ata_gen_passthru_sense(qc);1689		ata_scsi_set_passthru_sense_fields(qc);1690		if (is_ck_cond_request)1691			set_status_byte(qc->scsicmd, SAM_STAT_CHECK_CONDITION);1692	} else if (is_error && !have_sense) {1693		ata_gen_ata_sense(qc);1694	}1695 1696	ata_qc_done(qc);1697}1698 1699/**1700 *	ata_scsi_translate - Translate then issue SCSI command to ATA device1701 *	@dev: ATA device to which the command is addressed1702 *	@cmd: SCSI command to execute1703 *	@xlat_func: Actor which translates @cmd to an ATA taskfile1704 *1705 *	Our ->queuecommand() function has decided that the SCSI1706 *	command issued can be directly translated into an ATA1707 *	command, rather than handled internally.1708 *1709 *	This function sets up an ata_queued_cmd structure for the1710 *	SCSI command, and sends that ata_queued_cmd to the hardware.1711 *1712 *	The xlat_func argument (actor) returns 0 if ready to execute1713 *	ATA command, else 1 to finish translation. If 1 is returned1714 *	then cmd->result (and possibly cmd->sense_buffer) are assumed1715 *	to be set reflecting an error condition or clean (early)1716 *	termination.1717 *1718 *	LOCKING:1719 *	spin_lock_irqsave(host lock)1720 *1721 *	RETURNS:1722 *	0 on success, SCSI_ML_QUEUE_DEVICE_BUSY if the command1723 *	needs to be deferred.1724 */1725static int ata_scsi_translate(struct ata_device *dev, struct scsi_cmnd *cmd,1726			      ata_xlat_func_t xlat_func)1727{1728	struct ata_port *ap = dev->link->ap;1729	struct ata_queued_cmd *qc;1730	int rc;1731 1732	qc = ata_scsi_qc_new(dev, cmd);1733	if (!qc)1734		goto err_mem;1735 1736	/* data is present; dma-map it */1737	if (cmd->sc_data_direction == DMA_FROM_DEVICE ||1738	    cmd->sc_data_direction == DMA_TO_DEVICE) {1739		if (unlikely(scsi_bufflen(cmd) < 1)) {1740			ata_dev_warn(dev, "WARNING: zero len r/w req\n");1741			goto err_did;1742		}1743 1744		ata_sg_init(qc, scsi_sglist(cmd), scsi_sg_count(cmd));1745 1746		qc->dma_dir = cmd->sc_data_direction;1747	}1748 1749	qc->complete_fn = ata_scsi_qc_complete;1750 1751	if (xlat_func(qc))1752		goto early_finish;1753 1754	if (ap->ops->qc_defer) {1755		if ((rc = ap->ops->qc_defer(qc)))1756			goto defer;1757	}1758 1759	/* select device, send command to hardware */1760	ata_qc_issue(qc);1761 1762	return 0;1763 1764early_finish:1765	ata_qc_free(qc);1766	scsi_done(cmd);1767	return 0;1768 1769err_did:1770	ata_qc_free(qc);1771	cmd->result = (DID_ERROR << 16);1772	scsi_done(cmd);1773err_mem:1774	return 0;1775 1776defer:1777	ata_qc_free(qc);1778	if (rc == ATA_DEFER_LINK)1779		return SCSI_MLQUEUE_DEVICE_BUSY;1780	else1781		return SCSI_MLQUEUE_HOST_BUSY;1782}1783 1784struct ata_scsi_args {1785	struct ata_device	*dev;1786	u16			*id;1787	struct scsi_cmnd	*cmd;1788};1789 1790/**1791 *	ata_scsi_rbuf_fill - wrapper for SCSI command simulators1792 *	@args: device IDENTIFY data / SCSI command of interest.1793 *	@actor: Callback hook for desired SCSI command simulator1794 *1795 *	Takes care of the hard work of simulating a SCSI command...1796 *	Mapping the response buffer, calling the command's handler,1797 *	and handling the handler's return value.  This return value1798 *	indicates whether the handler wishes the SCSI command to be1799 *	completed successfully (0), or not (in which case cmd->result1800 *	and sense buffer are assumed to be set).1801 *1802 *	LOCKING:1803 *	spin_lock_irqsave(host lock)1804 */1805static void ata_scsi_rbuf_fill(struct ata_scsi_args *args,1806		unsigned int (*actor)(struct ata_scsi_args *args, u8 *rbuf))1807{1808	unsigned int rc;1809	struct scsi_cmnd *cmd = args->cmd;1810	unsigned long flags;1811 1812	spin_lock_irqsave(&ata_scsi_rbuf_lock, flags);1813 1814	memset(ata_scsi_rbuf, 0, ATA_SCSI_RBUF_SIZE);1815	rc = actor(args, ata_scsi_rbuf);1816	if (rc == 0)1817		sg_copy_from_buffer(scsi_sglist(cmd), scsi_sg_count(cmd),1818				    ata_scsi_rbuf, ATA_SCSI_RBUF_SIZE);1819 1820	spin_unlock_irqrestore(&ata_scsi_rbuf_lock, flags);1821 1822	if (rc == 0)1823		cmd->result = SAM_STAT_GOOD;1824}1825 1826/**1827 *	ata_scsiop_inq_std - Simulate INQUIRY command1828 *	@args: device IDENTIFY data / SCSI command of interest.1829 *	@rbuf: Response buffer, to which simulated SCSI cmd output is sent.1830 *1831 *	Returns standard device identification data associated1832 *	with non-VPD INQUIRY command output.1833 *1834 *	LOCKING:1835 *	spin_lock_irqsave(host lock)1836 */1837static unsigned int ata_scsiop_inq_std(struct ata_scsi_args *args, u8 *rbuf)1838{1839	static const u8 versions[] = {1840		0x00,1841		0x60,	/* SAM-3 (no version claimed) */1842 1843		0x03,1844		0x20,	/* SBC-2 (no version claimed) */1845 1846		0x03,1847		0x00	/* SPC-3 (no version claimed) */1848	};1849	static const u8 versions_zbc[] = {1850		0x00,1851		0xA0,	/* SAM-5 (no version claimed) */1852 1853		0x06,1854		0x00,	/* SBC-4 (no version claimed) */1855 1856		0x05,1857		0xC0,	/* SPC-5 (no version claimed) */1858 1859		0x60,1860		0x24,   /* ZBC r05 */1861	};1862 1863	u8 hdr[] = {1864		TYPE_DISK,1865		0,1866		0x5,	/* claim SPC-3 version compatibility */1867		2,1868		95 - 4,1869		0,1870		0,1871		21872	};1873 1874	/*1875	 * Set the SCSI Removable Media Bit (RMB) if the ATA removable media1876	 * device bit (obsolete since ATA-8 ACS) is set.1877	 */1878	if (ata_id_removable(args->id))1879		hdr[1] |= (1 << 7);1880 1881	if (args->dev->class == ATA_DEV_ZAC) {1882		hdr[0] = TYPE_ZBC;1883		hdr[2] = 0x7; /* claim SPC-5 version compatibility */1884	}1885 1886	if (args->dev->flags & ATA_DFLAG_CDL)1887		hdr[2] = 0xd; /* claim SPC-6 version compatibility */1888 1889	memcpy(rbuf, hdr, sizeof(hdr));1890	memcpy(&rbuf[8], "ATA     ", 8);1891	ata_id_string(args->id, &rbuf[16], ATA_ID_PROD, 16);1892 1893	/* From SAT, use last 2 words from fw rev unless they are spaces */1894	ata_id_string(args->id, &rbuf[32], ATA_ID_FW_REV + 2, 4);1895	if (strncmp(&rbuf[32], "    ", 4) == 0)1896		ata_id_string(args->id, &rbuf[32], ATA_ID_FW_REV, 4);1897 1898	if (rbuf[32] == 0 || rbuf[32] == ' ')1899		memcpy(&rbuf[32], "n/a ", 4);1900 1901	if (ata_id_zoned_cap(args->id) || args->dev->class == ATA_DEV_ZAC)1902		memcpy(rbuf + 58, versions_zbc, sizeof(versions_zbc));1903	else1904		memcpy(rbuf + 58, versions, sizeof(versions));1905 1906	return 0;1907}1908 1909/**1910 *	ata_scsiop_inq_00 - Simulate INQUIRY VPD page 0, list of pages1911 *	@args: device IDENTIFY data / SCSI command of interest.1912 *	@rbuf: Response buffer, to which simulated SCSI cmd output is sent.1913 *1914 *	Returns list of inquiry VPD pages available.1915 *1916 *	LOCKING:1917 *	spin_lock_irqsave(host lock)1918 */1919static unsigned int ata_scsiop_inq_00(struct ata_scsi_args *args, u8 *rbuf)1920{1921	int i, num_pages = 0;1922	static const u8 pages[] = {1923		0x00,	/* page 0x00, this page */1924		0x80,	/* page 0x80, unit serial no page */1925		0x83,	/* page 0x83, device ident page */1926		0x89,	/* page 0x89, ata info page */1927		0xb0,	/* page 0xb0, block limits page */1928		0xb1,	/* page 0xb1, block device characteristics page */1929		0xb2,	/* page 0xb2, thin provisioning page */1930		0xb6,	/* page 0xb6, zoned block device characteristics */1931		0xb9,	/* page 0xb9, concurrent positioning ranges */1932	};1933 1934	for (i = 0; i < sizeof(pages); i++) {1935		if (pages[i] == 0xb6 &&1936		    !(args->dev->flags & ATA_DFLAG_ZAC))1937			continue;1938		rbuf[num_pages + 4] = pages[i];1939		num_pages++;1940	}1941	rbuf[3] = num_pages;	/* number of supported VPD pages */1942	return 0;1943}1944 1945/**1946 *	ata_scsiop_inq_80 - Simulate INQUIRY VPD page 80, device serial number1947 *	@args: device IDENTIFY data / SCSI command of interest.1948 *	@rbuf: Response buffer, to which simulated SCSI cmd output is sent.1949 *1950 *	Returns ATA device serial number.1951 *1952 *	LOCKING:1953 *	spin_lock_irqsave(host lock)1954 */1955static unsigned int ata_scsiop_inq_80(struct ata_scsi_args *args, u8 *rbuf)1956{1957	static const u8 hdr[] = {1958		0,1959		0x80,			/* this page code */1960		0,1961		ATA_ID_SERNO_LEN,	/* page len */1962	};1963 1964	memcpy(rbuf, hdr, sizeof(hdr));1965	ata_id_string(args->id, (unsigned char *) &rbuf[4],1966		      ATA_ID_SERNO, ATA_ID_SERNO_LEN);1967	return 0;1968}1969 1970/**1971 *	ata_scsiop_inq_83 - Simulate INQUIRY VPD page 83, device identity1972 *	@args: device IDENTIFY data / SCSI command of interest.1973 *	@rbuf: Response buffer, to which simulated SCSI cmd output is sent.1974 *1975 *	Yields two logical unit device identification designators:1976 *	 - vendor specific ASCII containing the ATA serial number1977 *	 - SAT defined "t10 vendor id based" containing ASCII vendor1978 *	   name ("ATA     "), model and serial numbers.1979 *1980 *	LOCKING:1981 *	spin_lock_irqsave(host lock)1982 */1983static unsigned int ata_scsiop_inq_83(struct ata_scsi_args *args, u8 *rbuf)1984{1985	const int sat_model_serial_desc_len = 68;1986	int num;1987 1988	rbuf[1] = 0x83;			/* this page code */1989	num = 4;1990 1991	/* piv=0, assoc=lu, code_set=ACSII, designator=vendor */1992	rbuf[num + 0] = 2;1993	rbuf[num + 3] = ATA_ID_SERNO_LEN;1994	num += 4;1995	ata_id_string(args->id, (unsigned char *) rbuf + num,1996		      ATA_ID_SERNO, ATA_ID_SERNO_LEN);1997	num += ATA_ID_SERNO_LEN;1998 1999	/* SAT defined lu model and serial numbers descriptor */2000	/* piv=0, assoc=lu, code_set=ACSII, designator=t10 vendor id */2001	rbuf[num + 0] = 2;2002	rbuf[num + 1] = 1;2003	rbuf[num + 3] = sat_model_serial_desc_len;2004	num += 4;2005	memcpy(rbuf + num, "ATA     ", 8);2006	num += 8;2007	ata_id_string(args->id, (unsigned char *) rbuf + num, ATA_ID_PROD,2008		      ATA_ID_PROD_LEN);2009	num += ATA_ID_PROD_LEN;2010	ata_id_string(args->id, (unsigned char *) rbuf + num, ATA_ID_SERNO,2011		      ATA_ID_SERNO_LEN);2012	num += ATA_ID_SERNO_LEN;2013 2014	if (ata_id_has_wwn(args->id)) {2015		/* SAT defined lu world wide name */2016		/* piv=0, assoc=lu, code_set=binary, designator=NAA */2017		rbuf[num + 0] = 1;2018		rbuf[num + 1] = 3;2019		rbuf[num + 3] = ATA_ID_WWN_LEN;2020		num += 4;2021		ata_id_string(args->id, (unsigned char *) rbuf + num,2022			      ATA_ID_WWN, ATA_ID_WWN_LEN);2023		num += ATA_ID_WWN_LEN;2024	}2025	rbuf[3] = num - 4;    /* page len (assume less than 256 bytes) */2026	return 0;2027}2028 2029/**2030 *	ata_scsiop_inq_89 - Simulate INQUIRY VPD page 89, ATA info2031 *	@args: device IDENTIFY data / SCSI command of interest.2032 *	@rbuf: Response buffer, to which simulated SCSI cmd output is sent.2033 *2034 *	Yields SAT-specified ATA VPD page.2035 *2036 *	LOCKING:2037 *	spin_lock_irqsave(host lock)2038 */2039static unsigned int ata_scsiop_inq_89(struct ata_scsi_args *args, u8 *rbuf)2040{2041	rbuf[1] = 0x89;			/* our page code */2042	rbuf[2] = (0x238 >> 8);		/* page size fixed at 238h */2043	rbuf[3] = (0x238 & 0xff);2044 2045	memcpy(&rbuf[8], "linux   ", 8);2046	memcpy(&rbuf[16], "libata          ", 16);2047	memcpy(&rbuf[32], DRV_VERSION, 4);2048 2049	rbuf[36] = 0x34;		/* force D2H Reg FIS (34h) */2050	rbuf[37] = (1 << 7);		/* bit 7 indicates Command FIS */2051					/* TODO: PMP? */2052 2053	/* we don't store the ATA device signature, so we fake it */2054	rbuf[38] = ATA_DRDY;		/* really, this is Status reg */2055	rbuf[40] = 0x1;2056	rbuf[48] = 0x1;2057 2058	rbuf[56] = ATA_CMD_ID_ATA;2059 2060	memcpy(&rbuf[60], &args->id[0], 512);2061	return 0;2062}2063 2064static unsigned int ata_scsiop_inq_b0(struct ata_scsi_args *args, u8 *rbuf)2065{2066	struct ata_device *dev = args->dev;2067	u16 min_io_sectors;2068 2069	rbuf[1] = 0xb0;2070	rbuf[3] = 0x3c;		/* required VPD size with unmap support */2071 2072	/*2073	 * Optimal transfer length granularity.2074	 *2075	 * This is always one physical block, but for disks with a smaller2076	 * logical than physical sector size we need to figure out what the2077	 * latter is.2078	 */2079	min_io_sectors = 1 << ata_id_log2_per_physical_sector(args->id);2080	put_unaligned_be16(min_io_sectors, &rbuf[6]);2081 2082	/*2083	 * Optimal unmap granularity.2084	 *2085	 * The ATA spec doesn't even know about a granularity or alignment2086	 * for the TRIM command.  We can leave away most of the unmap related2087	 * VPD page entries, but we have specifify a granularity to signal2088	 * that we support some form of unmap - in thise case via WRITE SAME2089	 * with the unmap bit set.2090	 */2091	if (ata_id_has_trim(args->id)) {2092		u64 max_blocks = 65535 * ATA_MAX_TRIM_RNUM;2093 2094		if (dev->quirks & ATA_QUIRK_MAX_TRIM_128M)2095			max_blocks = 128 << (20 - SECTOR_SHIFT);2096 2097		put_unaligned_be64(max_blocks, &rbuf[36]);2098		put_unaligned_be32(1, &rbuf[28]);2099	}2100 2101	return 0;2102}2103 2104static unsigned int ata_scsiop_inq_b1(struct ata_scsi_args *args, u8 *rbuf)2105{2106	int form_factor = ata_id_form_factor(args->id);2107	int media_rotation_rate = ata_id_rotation_rate(args->id);2108	u8 zoned = ata_id_zoned_cap(args->id);2109 2110	rbuf[1] = 0xb1;2111	rbuf[3] = 0x3c;2112	rbuf[4] = media_rotation_rate >> 8;2113	rbuf[5] = media_rotation_rate;2114	rbuf[7] = form_factor;2115	if (zoned)2116		rbuf[8] = (zoned << 4);2117 2118	return 0;2119}2120 2121static unsigned int ata_scsiop_inq_b2(struct ata_scsi_args *args, u8 *rbuf)2122{2123	/* SCSI Thin Provisioning VPD page: SBC-3 rev 22 or later */2124	rbuf[1] = 0xb2;2125	rbuf[3] = 0x4;2126	rbuf[5] = 1 << 6;	/* TPWS */2127 2128	return 0;2129}2130 2131static unsigned int ata_scsiop_inq_b6(struct ata_scsi_args *args, u8 *rbuf)2132{2133	/*2134	 * zbc-r05 SCSI Zoned Block device characteristics VPD page2135	 */2136	rbuf[1] = 0xb6;2137	rbuf[3] = 0x3C;2138 2139	/*2140	 * URSWRZ bit is only meaningful for host-managed ZAC drives2141	 */2142	if (args->dev->zac_zoned_cap & 1)2143		rbuf[4] |= 1;2144	put_unaligned_be32(args->dev->zac_zones_optimal_open, &rbuf[8]);2145	put_unaligned_be32(args->dev->zac_zones_optimal_nonseq, &rbuf[12]);2146	put_unaligned_be32(args->dev->zac_zones_max_open, &rbuf[16]);2147 2148	return 0;2149}2150 2151static unsigned int ata_scsiop_inq_b9(struct ata_scsi_args *args, u8 *rbuf)2152{2153	struct ata_cpr_log *cpr_log = args->dev->cpr_log;2154	u8 *desc = &rbuf[64];2155	int i;2156 2157	/* SCSI Concurrent Positioning Ranges VPD page: SBC-5 rev 1 or later */2158	rbuf[1] = 0xb9;2159	put_unaligned_be16(64 + (int)cpr_log->nr_cpr * 32 - 4, &rbuf[2]);2160 2161	for (i = 0; i < cpr_log->nr_cpr; i++, desc += 32) {2162		desc[0] = cpr_log->cpr[i].num;2163		desc[1] = cpr_log->cpr[i].num_storage_elements;2164		put_unaligned_be64(cpr_log->cpr[i].start_lba, &desc[8]);2165		put_unaligned_be64(cpr_log->cpr[i].num_lbas, &desc[16]);2166	}2167 2168	return 0;2169}2170 2171/**2172 *	modecpy - Prepare response for MODE SENSE2173 *	@dest: output buffer2174 *	@src: data being copied2175 *	@n: length of mode page2176 *	@changeable: whether changeable parameters are requested2177 *2178 *	Generate a generic MODE SENSE page for either current or changeable2179 *	parameters.2180 *2181 *	LOCKING:2182 *	None.2183 */2184static void modecpy(u8 *dest, const u8 *src, int n, bool changeable)2185{2186	if (changeable) {2187		memcpy(dest, src, 2);2188		memset(dest + 2, 0, n - 2);2189	} else {2190		memcpy(dest, src, n);2191	}2192}2193 2194/**2195 *	ata_msense_caching - Simulate MODE SENSE caching info page2196 *	@id: device IDENTIFY data2197 *	@buf: output buffer2198 *	@changeable: whether changeable parameters are requested2199 *2200 *	Generate a caching info page, which conditionally indicates2201 *	write caching to the SCSI layer, depending on device2202 *	capabilities.2203 *2204 *	LOCKING:2205 *	None.2206 */2207static unsigned int ata_msense_caching(u16 *id, u8 *buf, bool changeable)2208{2209	modecpy(buf, def_cache_mpage, sizeof(def_cache_mpage), changeable);2210	if (changeable) {2211		buf[2] |= (1 << 2);	/* ata_mselect_caching() */2212	} else {2213		buf[2] |= (ata_id_wcache_enabled(id) << 2);	/* write cache enable */2214		buf[12] |= (!ata_id_rahead_enabled(id) << 5);	/* disable read ahead */2215	}2216	return sizeof(def_cache_mpage);2217}2218 2219/*2220 * Simulate MODE SENSE control mode page, sub-page 0.2221 */2222static unsigned int ata_msense_control_spg0(struct ata_device *dev, u8 *buf,2223					    bool changeable)2224{2225	modecpy(buf, def_control_mpage,2226		sizeof(def_control_mpage), changeable);2227	if (changeable) {2228		/* ata_mselect_control() */2229		buf[2] |= (1 << 2);2230	} else {2231		bool d_sense = (dev->flags & ATA_DFLAG_D_SENSE);2232 2233		/* descriptor format sense data */2234		buf[2] |= (d_sense << 2);2235	}2236 2237	return sizeof(def_control_mpage);2238}2239 2240/*2241 * Translate an ATA duration limit in microseconds to a SCSI duration limit2242 * using the t2cdlunits 0xa (10ms). Since the SCSI duration limits are 2-bytes2243 * only, take care of overflows.2244 */2245static inline u16 ata_xlat_cdl_limit(u8 *buf)2246{2247	u32 limit = get_unaligned_le32(buf);2248 2249	return min_t(u32, limit / 10000, 65535);2250}2251 2252/*2253 * Simulate MODE SENSE control mode page, sub-pages 07h and 08h2254 * (command duration limits T2A and T2B mode pages).2255 */2256static unsigned int ata_msense_control_spgt2(struct ata_device *dev, u8 *buf,2257					     u8 spg)2258{2259	u8 *b, *cdl, *desc;2260	u32 policy;2261	int i;2262 2263	if (!(dev->flags & ATA_DFLAG_CDL) || !dev->cdl)2264		return 0;2265 2266	cdl = dev->cdl->desc_log_buf;2267 2268	/*2269	 * Fill the subpage. The first four bytes of the T2A/T2B mode pages2270	 * are a header. The PAGE LENGTH field is the size of the page2271	 * excluding the header.2272	 */2273	buf[0] = CONTROL_MPAGE;2274	buf[1] = spg;2275	put_unaligned_be16(CDL_T2_SUB_MPAGE_LEN - 4, &buf[2]);2276	if (spg == CDL_T2A_SUB_MPAGE) {2277		/*2278		 * Read descriptors map to the T2A page:2279		 * set perf_vs_duration_guidleine.2280		 */2281		buf[7] = (cdl[0] & 0x03) << 4;2282		desc = cdl + 64;2283	} else {2284		/* Write descriptors map to the T2B page */2285		desc = cdl + 288;2286	}2287 2288	/* Fill the T2 page descriptors */2289	b = &buf[8];2290	policy = get_unaligned_le32(&cdl[0]);2291	for (i = 0; i < 7; i++, b += 32, desc += 32) {2292		/* t2cdlunits: fixed to 10ms */2293		b[0] = 0x0a;2294 2295		/* Max inactive time and its policy */2296		put_unaligned_be16(ata_xlat_cdl_limit(&desc[8]), &b[2]);2297		b[6] = ((policy >> 8) & 0x0f) << 4;2298 2299		/* Max active time and its policy */2300		put_unaligned_be16(ata_xlat_cdl_limit(&desc[4]), &b[4]);2301		b[6] |= (policy >> 4) & 0x0f;2302 2303		/* Command duration guideline and its policy */2304		put_unaligned_be16(ata_xlat_cdl_limit(&desc[16]), &b[10]);2305		b[14] = policy & 0x0f;2306	}2307 2308	return CDL_T2_SUB_MPAGE_LEN;2309}2310 2311/*2312 * Simulate MODE SENSE control mode page, sub-page f2h2313 * (ATA feature control mode page).2314 */2315static unsigned int ata_msense_control_ata_feature(struct ata_device *dev,2316						   u8 *buf)2317{2318	/* PS=0, SPF=1 */2319	buf[0] = CONTROL_MPAGE | (1 << 6);2320	buf[1] = ATA_FEATURE_SUB_MPAGE;2321 2322	/*2323	 * The first four bytes of ATA Feature Control mode page are a header.2324	 * The PAGE LENGTH field is the size of the page excluding the header.2325	 */2326	put_unaligned_be16(ATA_FEATURE_SUB_MPAGE_LEN - 4, &buf[2]);2327 2328	if (dev->flags & ATA_DFLAG_CDL)2329		buf[4] = 0x02; /* Support T2A and T2B pages */2330	else2331		buf[4] = 0;2332 2333	return ATA_FEATURE_SUB_MPAGE_LEN;2334}2335 2336/**2337 *	ata_msense_control - Simulate MODE SENSE control mode page2338 *	@dev: ATA device of interest2339 *	@buf: output buffer2340 *	@spg: sub-page code2341 *	@changeable: whether changeable parameters are requested2342 *2343 *	Generate a generic MODE SENSE control mode page.2344 *2345 *	LOCKING:2346 *	None.2347 */2348static unsigned int ata_msense_control(struct ata_device *dev, u8 *buf,2349				       u8 spg, bool changeable)2350{2351	unsigned int n;2352 2353	switch (spg) {2354	case 0:2355		return ata_msense_control_spg0(dev, buf, changeable);2356	case CDL_T2A_SUB_MPAGE:2357	case CDL_T2B_SUB_MPAGE:2358		return ata_msense_control_spgt2(dev, buf, spg);2359	case ATA_FEATURE_SUB_MPAGE:2360		return ata_msense_control_ata_feature(dev, buf);2361	case ALL_SUB_MPAGES:2362		n = ata_msense_control_spg0(dev, buf, changeable);2363		n += ata_msense_control_spgt2(dev, buf + n, CDL_T2A_SUB_MPAGE);2364		n += ata_msense_control_spgt2(dev, buf + n, CDL_T2B_SUB_MPAGE);2365		n += ata_msense_control_ata_feature(dev, buf + n);2366		return n;2367	default:2368		return 0;2369	}2370}2371 2372/**2373 *	ata_msense_rw_recovery - Simulate MODE SENSE r/w error recovery page2374 *	@buf: output buffer2375 *	@changeable: whether changeable parameters are requested2376 *2377 *	Generate a generic MODE SENSE r/w error recovery page.2378 *2379 *	LOCKING:2380 *	None.2381 */2382static unsigned int ata_msense_rw_recovery(u8 *buf, bool changeable)2383{2384	modecpy(buf, def_rw_recovery_mpage, sizeof(def_rw_recovery_mpage),2385		changeable);2386	return sizeof(def_rw_recovery_mpage);2387}2388 2389/**2390 *	ata_scsiop_mode_sense - Simulate MODE SENSE 6, 10 commands2391 *	@args: device IDENTIFY data / SCSI command of interest.2392 *	@rbuf: Response buffer, to which simulated SCSI cmd output is sent.2393 *2394 *	Simulate MODE SENSE commands. Assume this is invoked for direct2395 *	access devices (e.g. disks) only. There should be no block2396 *	descriptor for other device types.2397 *2398 *	LOCKING:2399 *	spin_lock_irqsave(host lock)2400 */2401static unsigned int ata_scsiop_mode_sense(struct ata_scsi_args *args, u8 *rbuf)2402{2403	struct ata_device *dev = args->dev;2404	u8 *scsicmd = args->cmd->cmnd, *p = rbuf;2405	static const u8 sat_blk_desc[] = {2406		0, 0, 0, 0,	/* number of blocks: sat unspecified */2407		0,2408		0, 0x2, 0x0	/* block length: 512 bytes */2409	};2410	u8 pg, spg;2411	unsigned int ebd, page_control, six_byte;2412	u8 dpofua = 0, bp = 0xff;2413	u16 fp;2414 2415	six_byte = (scsicmd[0] == MODE_SENSE);2416	ebd = !(scsicmd[1] & 0x8);      /* dbd bit inverted == edb */2417	/*2418	 * LLBA bit in msense(10) ignored (compliant)2419	 */2420 2421	page_control = scsicmd[2] >> 6;2422	switch (page_control) {2423	case 0: /* current */2424	case 1: /* changeable */2425	case 2: /* defaults */2426		break;  /* supported */2427	case 3: /* saved */2428		goto saving_not_supp;2429	default:2430		fp = 2;2431		bp = 6;2432		goto invalid_fld;2433	}2434 2435	if (six_byte)2436		p += 4 + (ebd ? 8 : 0);2437	else2438		p += 8 + (ebd ? 8 : 0);2439 2440	pg = scsicmd[2] & 0x3f;2441	spg = scsicmd[3];2442 2443	/*2444	 * Supported subpages: all subpages and sub-pages 07h, 08h and f2h of2445	 * the control page.2446	 */2447	if (spg) {2448		switch (spg) {2449		case ALL_SUB_MPAGES:2450			break;2451		case CDL_T2A_SUB_MPAGE:2452		case CDL_T2B_SUB_MPAGE:2453		case ATA_FEATURE_SUB_MPAGE:2454			if (dev->flags & ATA_DFLAG_CDL && pg == CONTROL_MPAGE)2455				break;2456			fallthrough;2457		default:2458			fp = 3;2459			goto invalid_fld;2460		}2461	}2462 2463	switch(pg) {2464	case RW_RECOVERY_MPAGE:2465		p += ata_msense_rw_recovery(p, page_control == 1);2466		break;2467 2468	case CACHE_MPAGE:2469		p += ata_msense_caching(args->id, p, page_control == 1);2470		break;2471 2472	case CONTROL_MPAGE:2473		p += ata_msense_control(args->dev, p, spg, page_control == 1);2474		break;2475 2476	case ALL_MPAGES:2477		p += ata_msense_rw_recovery(p, page_control == 1);2478		p += ata_msense_caching(args->id, p, page_control == 1);2479		p += ata_msense_control(args->dev, p, spg, page_control == 1);2480		break;2481 2482	default:		/* invalid page code */2483		fp = 2;2484		goto invalid_fld;2485	}2486 2487	if (dev->flags & ATA_DFLAG_FUA)2488		dpofua = 1 << 4;2489 2490	if (six_byte) {2491		rbuf[0] = p - rbuf - 1;2492		rbuf[2] |= dpofua;2493		if (ebd) {2494			rbuf[3] = sizeof(sat_blk_desc);2495			memcpy(rbuf + 4, sat_blk_desc, sizeof(sat_blk_desc));2496		}2497	} else {2498		put_unaligned_be16(p - rbuf - 2, &rbuf[0]);2499		rbuf[3] |= dpofua;2500		if (ebd) {2501			rbuf[7] = sizeof(sat_blk_desc);2502			memcpy(rbuf + 8, sat_blk_desc, sizeof(sat_blk_desc));2503		}2504	}2505	return 0;2506 2507invalid_fld:2508	ata_scsi_set_invalid_field(dev, args->cmd, fp, bp);2509	return 1;2510 2511saving_not_supp:2512	ata_scsi_set_sense(dev, args->cmd, ILLEGAL_REQUEST, 0x39, 0x0);2513	 /* "Saving parameters not supported" */2514	return 1;2515}2516 2517/**2518 *	ata_scsiop_read_cap - Simulate READ CAPACITY[ 16] commands2519 *	@args: device IDENTIFY data / SCSI command of interest.2520 *	@rbuf: Response buffer, to which simulated SCSI cmd output is sent.2521 *2522 *	Simulate READ CAPACITY commands.2523 *2524 *	LOCKING:2525 *	None.2526 */2527static unsigned int ata_scsiop_read_cap(struct ata_scsi_args *args, u8 *rbuf)2528{2529	struct ata_device *dev = args->dev;2530	u64 last_lba = dev->n_sectors - 1; /* LBA of the last block */2531	u32 sector_size; /* physical sector size in bytes */2532	u8 log2_per_phys;2533	u16 lowest_aligned;2534 2535	sector_size = ata_id_logical_sector_size(dev->id);2536	log2_per_phys = ata_id_log2_per_physical_sector(dev->id);2537	lowest_aligned = ata_id_logical_sector_offset(dev->id, log2_per_phys);2538 2539	if (args->cmd->cmnd[0] == READ_CAPACITY) {2540		if (last_lba >= 0xffffffffULL)2541			last_lba = 0xffffffff;2542 2543		/* sector count, 32-bit */2544		rbuf[0] = last_lba >> (8 * 3);2545		rbuf[1] = last_lba >> (8 * 2);2546		rbuf[2] = last_lba >> (8 * 1);2547		rbuf[3] = last_lba;2548 2549		/* sector size */2550		rbuf[4] = sector_size >> (8 * 3);2551		rbuf[5] = sector_size >> (8 * 2);2552		rbuf[6] = sector_size >> (8 * 1);2553		rbuf[7] = sector_size;2554	} else {2555		/* sector count, 64-bit */2556		rbuf[0] = last_lba >> (8 * 7);2557		rbuf[1] = last_lba >> (8 * 6);2558		rbuf[2] = last_lba >> (8 * 5);2559		rbuf[3] = last_lba >> (8 * 4);2560		rbuf[4] = last_lba >> (8 * 3);2561		rbuf[5] = last_lba >> (8 * 2);2562		rbuf[6] = last_lba >> (8 * 1);2563		rbuf[7] = last_lba;2564 2565		/* sector size */2566		rbuf[ 8] = sector_size >> (8 * 3);2567		rbuf[ 9] = sector_size >> (8 * 2);2568		rbuf[10] = sector_size >> (8 * 1);2569		rbuf[11] = sector_size;2570 2571		rbuf[12] = 0;2572		rbuf[13] = log2_per_phys;2573		rbuf[14] = (lowest_aligned >> 8) & 0x3f;2574		rbuf[15] = lowest_aligned;2575 2576		if (ata_id_has_trim(args->id) &&2577		    !(dev->quirks & ATA_QUIRK_NOTRIM)) {2578			rbuf[14] |= 0x80; /* LBPME */2579 2580			if (ata_id_has_zero_after_trim(args->id) &&2581			    dev->quirks & ATA_QUIRK_ZERO_AFTER_TRIM) {2582				ata_dev_info(dev, "Enabling discard_zeroes_data\n");2583				rbuf[14] |= 0x40; /* LBPRZ */2584			}2585		}2586		if (ata_id_zoned_cap(args->id) ||2587		    args->dev->class == ATA_DEV_ZAC)2588			rbuf[12] = (1 << 4); /* RC_BASIS */2589	}2590	return 0;2591}2592 2593/**2594 *	ata_scsiop_report_luns - Simulate REPORT LUNS command2595 *	@args: device IDENTIFY data / SCSI command of interest.2596 *	@rbuf: Response buffer, to which simulated SCSI cmd output is sent.2597 *2598 *	Simulate REPORT LUNS command.2599 *2600 *	LOCKING:2601 *	spin_lock_irqsave(host lock)2602 */2603static unsigned int ata_scsiop_report_luns(struct ata_scsi_args *args, u8 *rbuf)2604{2605	rbuf[3] = 8;	/* just one lun, LUN 0, size 8 bytes */2606 2607	return 0;2608}2609 2610/*2611 * ATAPI devices typically report zero for their SCSI version, and sometimes2612 * deviate from the spec WRT response data format.  If SCSI version is2613 * reported as zero like normal, then we make the following fixups:2614 *   1) Fake MMC-5 version, to indicate to the Linux scsi midlayer this is a2615 *	modern device.2616 *   2) Ensure response data format / ATAPI information are always correct.2617 */2618static void atapi_fixup_inquiry(struct scsi_cmnd *cmd)2619{2620	u8 buf[4];2621 2622	sg_copy_to_buffer(scsi_sglist(cmd), scsi_sg_count(cmd), buf, 4);2623	if (buf[2] == 0) {2624		buf[2] = 0x5;2625		buf[3] = 0x32;2626	}2627	sg_copy_from_buffer(scsi_sglist(cmd), scsi_sg_count(cmd), buf, 4);2628}2629 2630static void atapi_qc_complete(struct ata_queued_cmd *qc)2631{2632	struct scsi_cmnd *cmd = qc->scsicmd;2633	unsigned int err_mask = qc->err_mask;2634 2635	/* handle completion from EH */2636	if (unlikely(err_mask || qc->flags & ATA_QCFLAG_SENSE_VALID)) {2637 2638		if (!(qc->flags & ATA_QCFLAG_SENSE_VALID))2639			ata_gen_passthru_sense(qc);2640 2641		/* SCSI EH automatically locks door if sdev->locked is2642		 * set.  Sometimes door lock request continues to2643		 * fail, for example, when no media is present.  This2644		 * creates a loop - SCSI EH issues door lock which2645		 * fails and gets invoked again to acquire sense data2646		 * for the failed command.2647		 *2648		 * If door lock fails, always clear sdev->locked to2649		 * avoid this infinite loop.2650		 *2651		 * This may happen before SCSI scan is complete.  Make2652		 * sure qc->dev->sdev isn't NULL before dereferencing.2653		 */2654		if (qc->cdb[0] == ALLOW_MEDIUM_REMOVAL && qc->dev->sdev)2655			qc->dev->sdev->locked = 0;2656 2657		qc->scsicmd->result = SAM_STAT_CHECK_CONDITION;2658		ata_qc_done(qc);2659		return;2660	}2661 2662	/* successful completion path */2663	if (cmd->cmnd[0] == INQUIRY && (cmd->cmnd[1] & 0x03) == 0)2664		atapi_fixup_inquiry(cmd);2665	cmd->result = SAM_STAT_GOOD;2666 2667	ata_qc_done(qc);2668}2669/**2670 *	atapi_xlat - Initialize PACKET taskfile2671 *	@qc: command structure to be initialized2672 *2673 *	LOCKING:2674 *	spin_lock_irqsave(host lock)2675 *2676 *	RETURNS:2677 *	Zero on success, non-zero on failure.2678 */2679static unsigned int atapi_xlat(struct ata_queued_cmd *qc)2680{2681	struct scsi_cmnd *scmd = qc->scsicmd;2682	struct ata_device *dev = qc->dev;2683	int nodata = (scmd->sc_data_direction == DMA_NONE);2684	int using_pio = !nodata && (dev->flags & ATA_DFLAG_PIO);2685	unsigned int nbytes;2686 2687	memset(qc->cdb, 0, dev->cdb_len);2688	memcpy(qc->cdb, scmd->cmnd, scmd->cmd_len);2689 2690	qc->complete_fn = atapi_qc_complete;2691 2692	qc->tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;2693	if (scmd->sc_data_direction == DMA_TO_DEVICE) {2694		qc->tf.flags |= ATA_TFLAG_WRITE;2695	}2696 2697	qc->tf.command = ATA_CMD_PACKET;2698	ata_qc_set_pc_nbytes(qc);2699 2700	/* check whether ATAPI DMA is safe */2701	if (!nodata && !using_pio && atapi_check_dma(qc))2702		using_pio = 1;2703 2704	/* Some controller variants snoop this value for Packet2705	 * transfers to do state machine and FIFO management.  Thus we2706	 * want to set it properly, and for DMA where it is2707	 * effectively meaningless.2708	 */2709	nbytes = min(ata_qc_raw_nbytes(qc), (unsigned int)63 * 1024);2710 2711	/* Most ATAPI devices which honor transfer chunk size don't2712	 * behave according to the spec when odd chunk size which2713	 * matches the transfer length is specified.  If the number of2714	 * bytes to transfer is 2n+1.  According to the spec, what2715	 * should happen is to indicate that 2n+1 is going to be2716	 * transferred and transfer 2n+2 bytes where the last byte is2717	 * padding.2718	 *2719	 * In practice, this doesn't happen.  ATAPI devices first2720	 * indicate and transfer 2n bytes and then indicate and2721	 * transfer 2 bytes where the last byte is padding.2722	 *2723	 * This inconsistency confuses several controllers which2724	 * perform PIO using DMA such as Intel AHCIs and sil3124/32.2725	 * These controllers use actual number of transferred bytes to2726	 * update DMA pointer and transfer of 4n+2 bytes make those2727	 * controller push DMA pointer by 4n+4 bytes because SATA data2728	 * FISes are aligned to 4 bytes.  This causes data corruption2729	 * and buffer overrun.2730	 *2731	 * Always setting nbytes to even number solves this problem2732	 * because then ATAPI devices don't have to split data at 2n2733	 * boundaries.2734	 */2735	if (nbytes & 0x1)2736		nbytes++;2737 2738	qc->tf.lbam = (nbytes & 0xFF);2739	qc->tf.lbah = (nbytes >> 8);2740 2741	if (nodata)2742		qc->tf.protocol = ATAPI_PROT_NODATA;2743	else if (using_pio)2744		qc->tf.protocol = ATAPI_PROT_PIO;2745	else {2746		/* DMA data xfer */2747		qc->tf.protocol = ATAPI_PROT_DMA;2748		qc->tf.feature |= ATAPI_PKT_DMA;2749 2750		if ((dev->flags & ATA_DFLAG_DMADIR) &&2751		    (scmd->sc_data_direction != DMA_TO_DEVICE))2752			/* some SATA bridges need us to indicate data xfer direction */2753			qc->tf.feature |= ATAPI_DMADIR;2754	}2755 2756 2757	/* FIXME: We need to translate 0x05 READ_BLOCK_LIMITS to a MODE_SENSE2758	   as ATAPI tape drives don't get this right otherwise */2759	return 0;2760}2761 2762static struct ata_device *ata_find_dev(struct ata_port *ap, unsigned int devno)2763{2764	/*2765	 * For the non-PMP case, ata_link_max_devices() returns 1 (SATA case),2766	 * or 2 (IDE master + slave case). However, the former case includes2767	 * libsas hosted devices which are numbered per scsi host, leading2768	 * to devno potentially being larger than 0 but with each struct2769	 * ata_device having its own struct ata_port and struct ata_link.2770	 * To accommodate these, ignore devno and always use device number 0.2771	 */2772	if (likely(!sata_pmp_attached(ap))) {2773		int link_max_devices = ata_link_max_devices(&ap->link);2774 2775		if (link_max_devices == 1)2776			return &ap->link.device[0];2777 2778		if (devno < link_max_devices)2779			return &ap->link.device[devno];2780 2781		return NULL;2782	}2783 2784	/*2785	 * For PMP-attached devices, the device number corresponds to C2786	 * (channel) of SCSI [H:C:I:L], indicating the port pmp link2787	 * for the device.2788	 */2789	if (devno < ap->nr_pmp_links)2790		return &ap->pmp_link[devno].device[0];2791 2792	return NULL;2793}2794 2795static struct ata_device *__ata_scsi_find_dev(struct ata_port *ap,2796					      const struct scsi_device *scsidev)2797{2798	int devno;2799 2800	/* skip commands not addressed to targets we simulate */2801	if (!sata_pmp_attached(ap)) {2802		if (unlikely(scsidev->channel || scsidev->lun))2803			return NULL;2804		devno = scsidev->id;2805	} else {2806		if (unlikely(scsidev->id || scsidev->lun))2807			return NULL;2808		devno = scsidev->channel;2809	}2810 2811	return ata_find_dev(ap, devno);2812}2813 2814/**2815 *	ata_scsi_find_dev - lookup ata_device from scsi_cmnd2816 *	@ap: ATA port to which the device is attached2817 *	@scsidev: SCSI device from which we derive the ATA device2818 *2819 *	Given various information provided in struct scsi_cmnd,2820 *	map that onto an ATA bus, and using that mapping2821 *	determine which ata_device is associated with the2822 *	SCSI command to be sent.2823 *2824 *	LOCKING:2825 *	spin_lock_irqsave(host lock)2826 *2827 *	RETURNS:2828 *	Associated ATA device, or %NULL if not found.2829 */2830struct ata_device *2831ata_scsi_find_dev(struct ata_port *ap, const struct scsi_device *scsidev)2832{2833	struct ata_device *dev = __ata_scsi_find_dev(ap, scsidev);2834 2835	if (unlikely(!dev || !ata_dev_enabled(dev)))2836		return NULL;2837 2838	return dev;2839}2840 2841/*2842 *	ata_scsi_map_proto - Map pass-thru protocol value to taskfile value.2843 *	@byte1: Byte 1 from pass-thru CDB.2844 *2845 *	RETURNS:2846 *	ATA_PROT_UNKNOWN if mapping failed/unimplemented, protocol otherwise.2847 */2848static u82849ata_scsi_map_proto(u8 byte1)2850{2851	switch((byte1 & 0x1e) >> 1) {2852	case 3:		/* Non-data */2853		return ATA_PROT_NODATA;2854 2855	case 6:		/* DMA */2856	case 10:	/* UDMA Data-in */2857	case 11:	/* UDMA Data-Out */2858		return ATA_PROT_DMA;2859 2860	case 4:		/* PIO Data-in */2861	case 5:		/* PIO Data-out */2862		return ATA_PROT_PIO;2863 2864	case 12:	/* FPDMA */2865		return ATA_PROT_NCQ;2866 2867	case 0:		/* Hard Reset */2868	case 1:		/* SRST */2869	case 8:		/* Device Diagnostic */2870	case 9:		/* Device Reset */2871	case 7:		/* DMA Queued */2872	case 15:	/* Return Response Info */2873	default:	/* Reserved */2874		break;2875	}2876 2877	return ATA_PROT_UNKNOWN;2878}2879 2880/**2881 *	ata_scsi_pass_thru - convert ATA pass-thru CDB to taskfile2882 *	@qc: command structure to be initialized2883 *2884 *	Handles either 12, 16, or 32-byte versions of the CDB.2885 *2886 *	RETURNS:2887 *	Zero on success, non-zero on failure.2888 */2889static unsigned int ata_scsi_pass_thru(struct ata_queued_cmd *qc)2890{2891	struct ata_taskfile *tf = &(qc->tf);2892	struct scsi_cmnd *scmd = qc->scsicmd;2893	struct ata_device *dev = qc->dev;2894	const u8 *cdb = scmd->cmnd;2895	u16 fp;2896	u16 cdb_offset = 0;2897 2898	/* 7Fh variable length cmd means a ata pass-thru(32) */2899	if (cdb[0] == VARIABLE_LENGTH_CMD)2900		cdb_offset = 9;2901 2902	tf->protocol = ata_scsi_map_proto(cdb[1 + cdb_offset]);2903	if (tf->protocol == ATA_PROT_UNKNOWN) {2904		fp = 1;2905		goto invalid_fld;2906	}2907 2908	if ((cdb[2 + cdb_offset] & 0x3) == 0) {2909		/*2910		 * When T_LENGTH is zero (No data is transferred), dir should2911		 * be DMA_NONE.2912		 */2913		if (scmd->sc_data_direction != DMA_NONE) {2914			fp = 2 + cdb_offset;2915			goto invalid_fld;2916		}2917 2918		if (ata_is_ncq(tf->protocol))2919			tf->protocol = ATA_PROT_NCQ_NODATA;2920	}2921 2922	/* enable LBA */2923	tf->flags |= ATA_TFLAG_LBA;2924 2925	/*2926	 * 12 and 16 byte CDBs use different offsets to2927	 * provide the various register values.2928	 */2929	switch (cdb[0]) {2930	case ATA_16:2931		/*2932		 * 16-byte CDB - may contain extended commands.2933		 *2934		 * If that is the case, copy the upper byte register values.2935		 */2936		if (cdb[1] & 0x01) {2937			tf->hob_feature = cdb[3];2938			tf->hob_nsect = cdb[5];2939			tf->hob_lbal = cdb[7];2940			tf->hob_lbam = cdb[9];2941			tf->hob_lbah = cdb[11];2942			tf->flags |= ATA_TFLAG_LBA48;2943		} else2944			tf->flags &= ~ATA_TFLAG_LBA48;2945 2946		/*2947		 * Always copy low byte, device and command registers.2948		 */2949		tf->feature = cdb[4];2950		tf->nsect = cdb[6];2951		tf->lbal = cdb[8];2952		tf->lbam = cdb[10];2953		tf->lbah = cdb[12];2954		tf->device = cdb[13];2955		tf->command = cdb[14];2956		break;2957	case ATA_12:2958		/*2959		 * 12-byte CDB - incapable of extended commands.2960		 */2961		tf->flags &= ~ATA_TFLAG_LBA48;2962 2963		tf->feature = cdb[3];2964		tf->nsect = cdb[4];2965		tf->lbal = cdb[5];2966		tf->lbam = cdb[6];2967		tf->lbah = cdb[7];2968		tf->device = cdb[8];2969		tf->command = cdb[9];2970		break;2971	default:2972		/*2973		 * 32-byte CDB - may contain extended command fields.2974		 *2975		 * If that is the case, copy the upper byte register values.2976		 */2977		if (cdb[10] & 0x01) {2978			tf->hob_feature = cdb[20];2979			tf->hob_nsect = cdb[22];2980			tf->hob_lbal = cdb[16];2981			tf->hob_lbam = cdb[15];2982			tf->hob_lbah = cdb[14];2983			tf->flags |= ATA_TFLAG_LBA48;2984		} else2985			tf->flags &= ~ATA_TFLAG_LBA48;2986 2987		tf->feature = cdb[21];2988		tf->nsect = cdb[23];2989		tf->lbal = cdb[19];2990		tf->lbam = cdb[18];2991		tf->lbah = cdb[17];2992		tf->device = cdb[24];2993		tf->command = cdb[25];2994		tf->auxiliary = get_unaligned_be32(&cdb[28]);2995		break;2996	}2997 2998	/* For NCQ commands copy the tag value */2999	if (ata_is_ncq(tf->protocol))3000		tf->nsect = qc->hw_tag << 3;3001 3002	/* enforce correct master/slave bit */3003	tf->device = dev->devno ?3004		tf->device | ATA_DEV1 : tf->device & ~ATA_DEV1;3005 3006	switch (tf->command) {3007	/* READ/WRITE LONG use a non-standard sect_size */3008	case ATA_CMD_READ_LONG:3009	case ATA_CMD_READ_LONG_ONCE:3010	case ATA_CMD_WRITE_LONG:3011	case ATA_CMD_WRITE_LONG_ONCE:3012		if (tf->protocol != ATA_PROT_PIO || tf->nsect != 1) {3013			fp = 1;3014			goto invalid_fld;3015		}3016		qc->sect_size = scsi_bufflen(scmd);3017		break;3018 3019	/* commands using reported Logical Block size (e.g. 512 or 4K) */3020	case ATA_CMD_CFA_WRITE_NE:3021	case ATA_CMD_CFA_TRANS_SECT:3022	case ATA_CMD_CFA_WRITE_MULT_NE:3023	/* XXX: case ATA_CMD_CFA_WRITE_SECTORS_WITHOUT_ERASE: */3024	case ATA_CMD_READ:3025	case ATA_CMD_READ_EXT:3026	case ATA_CMD_READ_QUEUED:3027	/* XXX: case ATA_CMD_READ_QUEUED_EXT: */3028	case ATA_CMD_FPDMA_READ:3029	case ATA_CMD_READ_MULTI:3030	case ATA_CMD_READ_MULTI_EXT:3031	case ATA_CMD_PIO_READ:3032	case ATA_CMD_PIO_READ_EXT:3033	case ATA_CMD_READ_STREAM_DMA_EXT:3034	case ATA_CMD_READ_STREAM_EXT:3035	case ATA_CMD_VERIFY:3036	case ATA_CMD_VERIFY_EXT:3037	case ATA_CMD_WRITE:3038	case ATA_CMD_WRITE_EXT:3039	case ATA_CMD_WRITE_FUA_EXT:3040	case ATA_CMD_WRITE_QUEUED:3041	case ATA_CMD_WRITE_QUEUED_FUA_EXT:3042	case ATA_CMD_FPDMA_WRITE:3043	case ATA_CMD_WRITE_MULTI:3044	case ATA_CMD_WRITE_MULTI_EXT:3045	case ATA_CMD_WRITE_MULTI_FUA_EXT:3046	case ATA_CMD_PIO_WRITE:3047	case ATA_CMD_PIO_WRITE_EXT:3048	case ATA_CMD_WRITE_STREAM_DMA_EXT:3049	case ATA_CMD_WRITE_STREAM_EXT:3050		qc->sect_size = scmd->device->sector_size;3051		break;3052 3053	/* Everything else uses 512 byte "sectors" */3054	default:3055		qc->sect_size = ATA_SECT_SIZE;3056	}3057 3058	/*3059	 * Set flags so that all registers will be written, pass on3060	 * write indication (used for PIO/DMA setup), result TF is3061	 * copied back and we don't whine too much about its failure.3062	 */3063	tf->flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;3064	if (scmd->sc_data_direction == DMA_TO_DEVICE)3065		tf->flags |= ATA_TFLAG_WRITE;3066 3067	qc->flags |= ATA_QCFLAG_RESULT_TF | ATA_QCFLAG_QUIET;3068 3069	/*3070	 * Set transfer length.3071	 *3072	 * TODO: find out if we need to do more here to3073	 *       cover scatter/gather case.3074	 */3075	ata_qc_set_pc_nbytes(qc);3076 3077	/* We may not issue DMA commands if no DMA mode is set */3078	if (tf->protocol == ATA_PROT_DMA && !ata_dma_enabled(dev)) {3079		fp = 1;3080		goto invalid_fld;3081	}3082 3083	/* We may not issue NCQ commands to devices not supporting NCQ */3084	if (ata_is_ncq(tf->protocol) && !ata_ncq_enabled(dev)) {3085		fp = 1;3086		goto invalid_fld;3087	}3088 3089	/* sanity check for pio multi commands */3090	if ((cdb[1] & 0xe0) && !is_multi_taskfile(tf)) {3091		fp = 1;3092		goto invalid_fld;3093	}3094 3095	if (is_multi_taskfile(tf)) {3096		unsigned int multi_count = 1 << (cdb[1] >> 5);3097 3098		/* compare the passed through multi_count3099		 * with the cached multi_count of libata3100		 */3101		if (multi_count != dev->multi_count)3102			ata_dev_warn(dev, "invalid multi_count %u ignored\n",3103				     multi_count);3104	}3105 3106	/*3107	 * Filter SET_FEATURES - XFER MODE command -- otherwise,3108	 * SET_FEATURES - XFER MODE must be preceded/succeeded3109	 * by an update to hardware-specific registers for each3110	 * controller (i.e. the reason for ->set_piomode(),3111	 * ->set_dmamode(), and ->post_set_mode() hooks).3112	 */3113	if (tf->command == ATA_CMD_SET_FEATURES &&3114	    tf->feature == SETFEATURES_XFER) {3115		fp = (cdb[0] == ATA_16) ? 4 : 3;3116		goto invalid_fld;3117	}3118 3119	/*3120	 * Filter TPM commands by default. These provide an3121	 * essentially uncontrolled encrypted "back door" between3122	 * applications and the disk. Set libata.allow_tpm=1 if you3123	 * have a real reason for wanting to use them. This ensures3124	 * that installed software cannot easily mess stuff up without3125	 * user intent. DVR type users will probably ship with this enabled3126	 * for movie content management.3127	 *3128	 * Note that for ATA8 we can issue a DCS change and DCS freeze lock3129	 * for this and should do in future but that it is not sufficient as3130	 * DCS is an optional feature set. Thus we also do the software filter3131	 * so that we comply with the TC consortium stated goal that the user3132	 * can turn off TC features of their system.3133	 */3134	if (tf->command >= 0x5C && tf->command <= 0x5F && !libata_allow_tpm) {3135		fp = (cdb[0] == ATA_16) ? 14 : 9;3136		goto invalid_fld;3137	}3138 3139	return 0;3140 3141 invalid_fld:3142	ata_scsi_set_invalid_field(dev, scmd, fp, 0xff);3143	return 1;3144}3145 3146/**3147 * ata_format_dsm_trim_descr() - SATL Write Same to DSM Trim3148 * @cmd: SCSI command being translated3149 * @trmax: Maximum number of entries that will fit in sector_size bytes.3150 * @sector: Starting sector3151 * @count: Total Range of request in logical sectors3152 *3153 * Rewrite the WRITE SAME descriptor to be a DSM TRIM little-endian formatted3154 * descriptor.3155 *3156 * Upto 64 entries of the format:3157 *   63:48 Range Length3158 *   47:0  LBA3159 *3160 *  Range Length of 0 is ignored.3161 *  LBA's should be sorted order and not overlap.3162 *3163 * NOTE: this is the same format as ADD LBA(S) TO NV CACHE PINNED SET3164 *3165 * Return: Number of bytes copied into sglist.3166 */3167static size_t ata_format_dsm_trim_descr(struct scsi_cmnd *cmd, u32 trmax,3168					u64 sector, u32 count)3169{3170	struct scsi_device *sdp = cmd->device;3171	size_t len = sdp->sector_size;3172	size_t r;3173	__le64 *buf;3174	u32 i = 0;3175	unsigned long flags;3176 3177	WARN_ON(len > ATA_SCSI_RBUF_SIZE);3178 3179	if (len > ATA_SCSI_RBUF_SIZE)3180		len = ATA_SCSI_RBUF_SIZE;3181 3182	spin_lock_irqsave(&ata_scsi_rbuf_lock, flags);3183	buf = ((void *)ata_scsi_rbuf);3184	memset(buf, 0, len);3185	while (i < trmax) {3186		u64 entry = sector |3187			((u64)(count > 0xffff ? 0xffff : count) << 48);3188		buf[i++] = __cpu_to_le64(entry);3189		if (count <= 0xffff)3190			break;3191		count -= 0xffff;3192		sector += 0xffff;3193	}3194	r = sg_copy_from_buffer(scsi_sglist(cmd), scsi_sg_count(cmd), buf, len);3195	spin_unlock_irqrestore(&ata_scsi_rbuf_lock, flags);3196 3197	return r;3198}3199 3200/**3201 * ata_scsi_write_same_xlat() - SATL Write Same to ATA SCT Write Same3202 * @qc: Command to be translated3203 *3204 * Translate a SCSI WRITE SAME command to be either a DSM TRIM command or3205 * an SCT Write Same command.3206 * Based on WRITE SAME has the UNMAP flag:3207 *3208 *   - When set translate to DSM TRIM3209 *   - When clear translate to SCT Write Same3210 */3211static unsigned int ata_scsi_write_same_xlat(struct ata_queued_cmd *qc)3212{3213	struct ata_taskfile *tf = &qc->tf;3214	struct scsi_cmnd *scmd = qc->scsicmd;3215	struct scsi_device *sdp = scmd->device;3216	size_t len = sdp->sector_size;3217	struct ata_device *dev = qc->dev;3218	const u8 *cdb = scmd->cmnd;3219	u64 block;3220	u32 n_block;3221	const u32 trmax = len >> 3;3222	u32 size;3223	u16 fp;3224	u8 bp = 0xff;3225	u8 unmap = cdb[1] & 0x8;3226 3227	/* we may not issue DMA commands if no DMA mode is set */3228	if (unlikely(!ata_dma_enabled(dev)))3229		goto invalid_opcode;3230 3231	/*3232	 * We only allow sending this command through the block layer,3233	 * as it modifies the DATA OUT buffer, which would corrupt user3234	 * memory for SG_IO commands.3235	 */3236	if (unlikely(blk_rq_is_passthrough(scsi_cmd_to_rq(scmd))))3237		goto invalid_opcode;3238 3239	if (unlikely(scmd->cmd_len < 16)) {3240		fp = 15;3241		goto invalid_fld;3242	}3243	scsi_16_lba_len(cdb, &block, &n_block);3244 3245	if (!unmap || (dev->quirks & ATA_QUIRK_NOTRIM) ||3246	    !ata_id_has_trim(dev->id)) {3247		fp = 1;3248		bp = 3;3249		goto invalid_fld;3250	}3251	/* If the request is too large the cmd is invalid */3252	if (n_block > 0xffff * trmax) {3253		fp = 2;3254		goto invalid_fld;3255	}3256 3257	/*3258	 * WRITE SAME always has a sector sized buffer as payload, this3259	 * should never be a multiple entry S/G list.3260	 */3261	if (!scsi_sg_count(scmd))3262		goto invalid_param_len;3263 3264	/*3265	 * size must match sector size in bytes3266	 * For DATA SET MANAGEMENT TRIM in ACS-2 nsect (aka count)3267	 * is defined as number of 512 byte blocks to be transferred.3268	 */3269 3270	size = ata_format_dsm_trim_descr(scmd, trmax, block, n_block);3271	if (size != len)3272		goto invalid_param_len;3273 3274	if (ata_ncq_enabled(dev) && ata_fpdma_dsm_supported(dev)) {3275		/* Newer devices support queued TRIM commands */3276		tf->protocol = ATA_PROT_NCQ;3277		tf->command = ATA_CMD_FPDMA_SEND;3278		tf->hob_nsect = ATA_SUBCMD_FPDMA_SEND_DSM & 0x1f;3279		tf->nsect = qc->hw_tag << 3;3280		tf->hob_feature = (size / 512) >> 8;3281		tf->feature = size / 512;3282 3283		tf->auxiliary = 1;3284	} else {3285		tf->protocol = ATA_PROT_DMA;3286		tf->hob_feature = 0;3287		tf->feature = ATA_DSM_TRIM;3288		tf->hob_nsect = (size / 512) >> 8;3289		tf->nsect = size / 512;3290		tf->command = ATA_CMD_DSM;3291	}3292 3293	tf->flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE | ATA_TFLAG_LBA48 |3294		     ATA_TFLAG_WRITE;3295 3296	ata_qc_set_pc_nbytes(qc);3297 3298	return 0;3299 3300invalid_fld:3301	ata_scsi_set_invalid_field(dev, scmd, fp, bp);3302	return 1;3303invalid_param_len:3304	/* "Parameter list length error" */3305	ata_scsi_set_sense(dev, scmd, ILLEGAL_REQUEST, 0x1a, 0x0);3306	return 1;3307invalid_opcode:3308	/* "Invalid command operation code" */3309	ata_scsi_set_sense(dev, scmd, ILLEGAL_REQUEST, 0x20, 0x0);3310	return 1;3311}3312 3313/**3314 *	ata_scsiop_maint_in - Simulate a subset of MAINTENANCE_IN3315 *	@args: device MAINTENANCE_IN data / SCSI command of interest.3316 *	@rbuf: Response buffer, to which simulated SCSI cmd output is sent.3317 *3318 *	Yields a subset to satisfy scsi_report_opcode()3319 *3320 *	LOCKING:3321 *	spin_lock_irqsave(host lock)3322 */3323static unsigned int ata_scsiop_maint_in(struct ata_scsi_args *args, u8 *rbuf)3324{3325	struct ata_device *dev = args->dev;3326	u8 *cdb = args->cmd->cmnd;3327	u8 supported = 0, cdlp = 0, rwcdlp = 0;3328	unsigned int err = 0;3329 3330	if (cdb[2] != 1 && cdb[2] != 3) {3331		ata_dev_warn(dev, "invalid command format %d\n", cdb[2]);3332		err = 2;3333		goto out;3334	}3335 3336	switch (cdb[3]) {3337	case INQUIRY:3338	case MODE_SENSE:3339	case MODE_SENSE_10:3340	case READ_CAPACITY:3341	case SERVICE_ACTION_IN_16:3342	case REPORT_LUNS:3343	case REQUEST_SENSE:3344	case SYNCHRONIZE_CACHE:3345	case SYNCHRONIZE_CACHE_16:3346	case REZERO_UNIT:3347	case SEEK_6:3348	case SEEK_10:3349	case TEST_UNIT_READY:3350	case SEND_DIAGNOSTIC:3351	case MAINTENANCE_IN:3352	case READ_6:3353	case READ_10:3354	case WRITE_6:3355	case WRITE_10:3356	case ATA_12:3357	case ATA_16:3358	case VERIFY:3359	case VERIFY_16:3360	case MODE_SELECT:3361	case MODE_SELECT_10:3362	case START_STOP:3363		supported = 3;3364		break;3365	case READ_16:3366		supported = 3;3367		if (dev->flags & ATA_DFLAG_CDL) {3368			/*3369			 * CDL read descriptors map to the T2A page, that is,3370			 * rwcdlp = 0x01 and cdlp = 0x013371			 */3372			rwcdlp = 0x01;3373			cdlp = 0x01 << 3;3374		}3375		break;3376	case WRITE_16:3377		supported = 3;3378		if (dev->flags & ATA_DFLAG_CDL) {3379			/*3380			 * CDL write descriptors map to the T2B page, that is,3381			 * rwcdlp = 0x01 and cdlp = 0x023382			 */3383			rwcdlp = 0x01;3384			cdlp = 0x02 << 3;3385		}3386		break;3387	case ZBC_IN:3388	case ZBC_OUT:3389		if (ata_id_zoned_cap(dev->id) ||3390		    dev->class == ATA_DEV_ZAC)3391			supported = 3;3392		break;3393	case SECURITY_PROTOCOL_IN:3394	case SECURITY_PROTOCOL_OUT:3395		if (dev->flags & ATA_DFLAG_TRUSTED)3396			supported = 3;3397		break;3398	default:3399		break;3400	}3401out:3402	/* One command format */3403	rbuf[0] = rwcdlp;3404	rbuf[1] = cdlp | supported;3405	return err;3406}3407 3408/**3409 *	ata_scsi_report_zones_complete - convert ATA output3410 *	@qc: command structure returning the data3411 *3412 *	Convert T-13 little-endian field representation into3413 *	T-10 big-endian field representation.3414 *	What a mess.3415 */3416static void ata_scsi_report_zones_complete(struct ata_queued_cmd *qc)3417{3418	struct scsi_cmnd *scmd = qc->scsicmd;3419	struct sg_mapping_iter miter;3420	unsigned long flags;3421	unsigned int bytes = 0;3422 3423	sg_miter_start(&miter, scsi_sglist(scmd), scsi_sg_count(scmd),3424		       SG_MITER_TO_SG | SG_MITER_ATOMIC);3425 3426	local_irq_save(flags);3427	while (sg_miter_next(&miter)) {3428		unsigned int offset = 0;3429 3430		if (bytes == 0) {3431			char *hdr;3432			u32 list_length;3433			u64 max_lba, opt_lba;3434			u16 same;3435 3436			/* Swizzle header */3437			hdr = miter.addr;3438			list_length = get_unaligned_le32(&hdr[0]);3439			same = get_unaligned_le16(&hdr[4]);3440			max_lba = get_unaligned_le64(&hdr[8]);3441			opt_lba = get_unaligned_le64(&hdr[16]);3442			put_unaligned_be32(list_length, &hdr[0]);3443			hdr[4] = same & 0xf;3444			put_unaligned_be64(max_lba, &hdr[8]);3445			put_unaligned_be64(opt_lba, &hdr[16]);3446			offset += 64;3447			bytes += 64;3448		}3449		while (offset < miter.length) {3450			char *rec;3451			u8 cond, type, non_seq, reset;3452			u64 size, start, wp;3453 3454			/* Swizzle zone descriptor */3455			rec = miter.addr + offset;3456			type = rec[0] & 0xf;3457			cond = (rec[1] >> 4) & 0xf;3458			non_seq = (rec[1] & 2);3459			reset = (rec[1] & 1);3460			size = get_unaligned_le64(&rec[8]);3461			start = get_unaligned_le64(&rec[16]);3462			wp = get_unaligned_le64(&rec[24]);3463			rec[0] = type;3464			rec[1] = (cond << 4) | non_seq | reset;3465			put_unaligned_be64(size, &rec[8]);3466			put_unaligned_be64(start, &rec[16]);3467			put_unaligned_be64(wp, &rec[24]);3468			WARN_ON(offset + 64 > miter.length);3469			offset += 64;3470			bytes += 64;3471		}3472	}3473	sg_miter_stop(&miter);3474	local_irq_restore(flags);3475 3476	ata_scsi_qc_complete(qc);3477}3478 3479static unsigned int ata_scsi_zbc_in_xlat(struct ata_queued_cmd *qc)3480{3481	struct ata_taskfile *tf = &qc->tf;3482	struct scsi_cmnd *scmd = qc->scsicmd;3483	const u8 *cdb = scmd->cmnd;3484	u16 sect, fp = (u16)-1;3485	u8 sa, options, bp = 0xff;3486	u64 block;3487	u32 n_block;3488 3489	if (unlikely(scmd->cmd_len < 16)) {3490		ata_dev_warn(qc->dev, "invalid cdb length %d\n",3491			     scmd->cmd_len);3492		fp = 15;3493		goto invalid_fld;3494	}3495	scsi_16_lba_len(cdb, &block, &n_block);3496	if (n_block != scsi_bufflen(scmd)) {3497		ata_dev_warn(qc->dev, "non-matching transfer count (%d/%d)\n",3498			     n_block, scsi_bufflen(scmd));3499		goto invalid_param_len;3500	}3501	sa = cdb[1] & 0x1f;3502	if (sa != ZI_REPORT_ZONES) {3503		ata_dev_warn(qc->dev, "invalid service action %d\n", sa);3504		fp = 1;3505		goto invalid_fld;3506	}3507	/*3508	 * ZAC allows only for transfers in 512 byte blocks,3509	 * and uses a 16 bit value for the transfer count.3510	 */3511	if ((n_block / 512) > 0xffff || n_block < 512 || (n_block % 512)) {3512		ata_dev_warn(qc->dev, "invalid transfer count %d\n", n_block);3513		goto invalid_param_len;3514	}3515	sect = n_block / 512;3516	options = cdb[14] & 0xbf;3517 3518	if (ata_ncq_enabled(qc->dev) &&3519	    ata_fpdma_zac_mgmt_in_supported(qc->dev)) {3520		tf->protocol = ATA_PROT_NCQ;3521		tf->command = ATA_CMD_FPDMA_RECV;3522		tf->hob_nsect = ATA_SUBCMD_FPDMA_RECV_ZAC_MGMT_IN & 0x1f;3523		tf->nsect = qc->hw_tag << 3;3524		tf->feature = sect & 0xff;3525		tf->hob_feature = (sect >> 8) & 0xff;3526		tf->auxiliary = ATA_SUBCMD_ZAC_MGMT_IN_REPORT_ZONES | (options << 8);3527	} else {3528		tf->command = ATA_CMD_ZAC_MGMT_IN;3529		tf->feature = ATA_SUBCMD_ZAC_MGMT_IN_REPORT_ZONES;3530		tf->protocol = ATA_PROT_DMA;3531		tf->hob_feature = options;3532		tf->hob_nsect = (sect >> 8) & 0xff;3533		tf->nsect = sect & 0xff;3534	}3535	tf->device = ATA_LBA;3536	tf->lbah = (block >> 16) & 0xff;3537	tf->lbam = (block >> 8) & 0xff;3538	tf->lbal = block & 0xff;3539	tf->hob_lbah = (block >> 40) & 0xff;3540	tf->hob_lbam = (block >> 32) & 0xff;3541	tf->hob_lbal = (block >> 24) & 0xff;3542 3543	tf->flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE | ATA_TFLAG_LBA48;3544	qc->flags |= ATA_QCFLAG_RESULT_TF;3545 3546	ata_qc_set_pc_nbytes(qc);3547 3548	qc->complete_fn = ata_scsi_report_zones_complete;3549 3550	return 0;3551 3552invalid_fld:3553	ata_scsi_set_invalid_field(qc->dev, scmd, fp, bp);3554	return 1;3555 3556invalid_param_len:3557	/* "Parameter list length error" */3558	ata_scsi_set_sense(qc->dev, scmd, ILLEGAL_REQUEST, 0x1a, 0x0);3559	return 1;3560}3561 3562static unsigned int ata_scsi_zbc_out_xlat(struct ata_queued_cmd *qc)3563{3564	struct ata_taskfile *tf = &qc->tf;3565	struct scsi_cmnd *scmd = qc->scsicmd;3566	struct ata_device *dev = qc->dev;3567	const u8 *cdb = scmd->cmnd;3568	u8 all, sa;3569	u64 block;3570	u32 n_block;3571	u16 fp = (u16)-1;3572 3573	if (unlikely(scmd->cmd_len < 16)) {3574		fp = 15;3575		goto invalid_fld;3576	}3577 3578	sa = cdb[1] & 0x1f;3579	if ((sa != ZO_CLOSE_ZONE) && (sa != ZO_FINISH_ZONE) &&3580	    (sa != ZO_OPEN_ZONE) && (sa != ZO_RESET_WRITE_POINTER)) {3581		fp = 1;3582		goto invalid_fld;3583	}3584 3585	scsi_16_lba_len(cdb, &block, &n_block);3586	if (n_block) {3587		/*3588		 * ZAC MANAGEMENT OUT doesn't define any length3589		 */3590		goto invalid_param_len;3591	}3592 3593	all = cdb[14] & 0x1;3594	if (all) {3595		/*3596		 * Ignore the block address (zone ID) as defined by ZBC.3597		 */3598		block = 0;3599	} else if (block >= dev->n_sectors) {3600		/*3601		 * Block must be a valid zone ID (a zone start LBA).3602		 */3603		fp = 2;3604		goto invalid_fld;3605	}3606 3607	if (ata_ncq_enabled(qc->dev) &&3608	    ata_fpdma_zac_mgmt_out_supported(qc->dev)) {3609		tf->protocol = ATA_PROT_NCQ_NODATA;3610		tf->command = ATA_CMD_NCQ_NON_DATA;3611		tf->feature = ATA_SUBCMD_NCQ_NON_DATA_ZAC_MGMT_OUT;3612		tf->nsect = qc->hw_tag << 3;3613		tf->auxiliary = sa | ((u16)all << 8);3614	} else {3615		tf->protocol = ATA_PROT_NODATA;3616		tf->command = ATA_CMD_ZAC_MGMT_OUT;3617		tf->feature = sa;3618		tf->hob_feature = all;3619	}3620	tf->lbah = (block >> 16) & 0xff;3621	tf->lbam = (block >> 8) & 0xff;3622	tf->lbal = block & 0xff;3623	tf->hob_lbah = (block >> 40) & 0xff;3624	tf->hob_lbam = (block >> 32) & 0xff;3625	tf->hob_lbal = (block >> 24) & 0xff;3626	tf->device = ATA_LBA;3627	tf->flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE | ATA_TFLAG_LBA48;3628 3629	return 0;3630 3631 invalid_fld:3632	ata_scsi_set_invalid_field(qc->dev, scmd, fp, 0xff);3633	return 1;3634invalid_param_len:3635	/* "Parameter list length error" */3636	ata_scsi_set_sense(qc->dev, scmd, ILLEGAL_REQUEST, 0x1a, 0x0);3637	return 1;3638}3639 3640/**3641 *	ata_mselect_caching - Simulate MODE SELECT for caching info page3642 *	@qc: Storage for translated ATA taskfile3643 *	@buf: input buffer3644 *	@len: number of valid bytes in the input buffer3645 *	@fp: out parameter for the failed field on error3646 *3647 *	Prepare a taskfile to modify caching information for the device.3648 *3649 *	LOCKING:3650 *	None.3651 */3652static int ata_mselect_caching(struct ata_queued_cmd *qc,3653			       const u8 *buf, int len, u16 *fp)3654{3655	struct ata_taskfile *tf = &qc->tf;3656	struct ata_device *dev = qc->dev;3657	u8 mpage[CACHE_MPAGE_LEN];3658	u8 wce;3659	int i;3660 3661	/*3662	 * The first two bytes of def_cache_mpage are a header, so offsets3663	 * in mpage are off by 2 compared to buf.  Same for len.3664	 */3665 3666	if (len != CACHE_MPAGE_LEN - 2) {3667		*fp = min(len, CACHE_MPAGE_LEN - 2);3668		return -EINVAL;3669	}3670 3671	wce = buf[0] & (1 << 2);3672 3673	/*3674	 * Check that read-only bits are not modified.3675	 */3676	ata_msense_caching(dev->id, mpage, false);3677	for (i = 0; i < CACHE_MPAGE_LEN - 2; i++) {3678		if (i == 0)3679			continue;3680		if (mpage[i + 2] != buf[i]) {3681			*fp = i;3682			return -EINVAL;3683		}3684	}3685 3686	tf->flags |= ATA_TFLAG_DEVICE | ATA_TFLAG_ISADDR;3687	tf->protocol = ATA_PROT_NODATA;3688	tf->nsect = 0;3689	tf->command = ATA_CMD_SET_FEATURES;3690	tf->feature = wce ? SETFEATURES_WC_ON : SETFEATURES_WC_OFF;3691	return 0;3692}3693 3694/*3695 * Simulate MODE SELECT control mode page, sub-page 0.3696 */3697static int ata_mselect_control_spg0(struct ata_queued_cmd *qc,3698				    const u8 *buf, int len, u16 *fp)3699{3700	struct ata_device *dev = qc->dev;3701	u8 mpage[CONTROL_MPAGE_LEN];3702	u8 d_sense;3703	int i;3704 3705	/*3706	 * The first two bytes of def_control_mpage are a header, so offsets3707	 * in mpage are off by 2 compared to buf.  Same for len.3708	 */3709 3710	if (len != CONTROL_MPAGE_LEN - 2) {3711		*fp = min(len, CONTROL_MPAGE_LEN - 2);3712		return -EINVAL;3713	}3714 3715	d_sense = buf[0] & (1 << 2);3716 3717	/*3718	 * Check that read-only bits are not modified.3719	 */3720	ata_msense_control_spg0(dev, mpage, false);3721	for (i = 0; i < CONTROL_MPAGE_LEN - 2; i++) {3722		if (i == 0)3723			continue;3724		if (mpage[2 + i] != buf[i]) {3725			*fp = i;3726			return -EINVAL;3727		}3728	}3729	if (d_sense & (1 << 2))3730		dev->flags |= ATA_DFLAG_D_SENSE;3731	else3732		dev->flags &= ~ATA_DFLAG_D_SENSE;3733	return 0;3734}3735 3736/*3737 * Translate MODE SELECT control mode page, sub-pages f2h (ATA feature mode3738 * page) into a SET FEATURES command.3739 */3740static unsigned int ata_mselect_control_ata_feature(struct ata_queued_cmd *qc,3741						    const u8 *buf, int len,3742						    u16 *fp)3743{3744	struct ata_device *dev = qc->dev;3745	struct ata_taskfile *tf = &qc->tf;3746	u8 cdl_action;3747 3748	/*3749	 * The first four bytes of ATA Feature Control mode page are a header,3750	 * so offsets in mpage are off by 4 compared to buf.  Same for len.3751	 */3752	if (len != ATA_FEATURE_SUB_MPAGE_LEN - 4) {3753		*fp = min(len, ATA_FEATURE_SUB_MPAGE_LEN - 4);3754		return -EINVAL;3755	}3756 3757	/* Check cdl_ctrl */3758	switch (buf[0] & 0x03) {3759	case 0:3760		/* Disable CDL */3761		cdl_action = 0;3762		dev->flags &= ~ATA_DFLAG_CDL_ENABLED;3763		break;3764	case 0x02:3765		/* Enable CDL T2A/T2B: NCQ priority must be disabled */3766		if (dev->flags & ATA_DFLAG_NCQ_PRIO_ENABLED) {3767			ata_dev_err(dev,3768				"NCQ priority must be disabled to enable CDL\n");3769			return -EINVAL;3770		}3771		cdl_action = 1;3772		dev->flags |= ATA_DFLAG_CDL_ENABLED;3773		break;3774	default:3775		*fp = 0;3776		return -EINVAL;3777	}3778 3779	tf->flags |= ATA_TFLAG_DEVICE | ATA_TFLAG_ISADDR;3780	tf->protocol = ATA_PROT_NODATA;3781	tf->command = ATA_CMD_SET_FEATURES;3782	tf->feature = SETFEATURES_CDL;3783	tf->nsect = cdl_action;3784 3785	return 1;3786}3787 3788/**3789 *	ata_mselect_control - Simulate MODE SELECT for control page3790 *	@qc: Storage for translated ATA taskfile3791 *	@spg: target sub-page of the control page3792 *	@buf: input buffer3793 *	@len: number of valid bytes in the input buffer3794 *	@fp: out parameter for the failed field on error3795 *3796 *	Prepare a taskfile to modify caching information for the device.3797 *3798 *	LOCKING:3799 *	None.3800 */3801static int ata_mselect_control(struct ata_queued_cmd *qc, u8 spg,3802			       const u8 *buf, int len, u16 *fp)3803{3804	switch (spg) {3805	case 0:3806		return ata_mselect_control_spg0(qc, buf, len, fp);3807	case ATA_FEATURE_SUB_MPAGE:3808		return ata_mselect_control_ata_feature(qc, buf, len, fp);3809	default:3810		return -EINVAL;3811	}3812}3813 3814/**3815 *	ata_scsi_mode_select_xlat - Simulate MODE SELECT 6, 10 commands3816 *	@qc: Storage for translated ATA taskfile3817 *3818 *	Converts a MODE SELECT command to an ATA SET FEATURES taskfile.3819 *	Assume this is invoked for direct access devices (e.g. disks) only.3820 *	There should be no block descriptor for other device types.3821 *3822 *	LOCKING:3823 *	spin_lock_irqsave(host lock)3824 */3825static unsigned int ata_scsi_mode_select_xlat(struct ata_queued_cmd *qc)3826{3827	struct scsi_cmnd *scmd = qc->scsicmd;3828	const u8 *cdb = scmd->cmnd;3829	u8 pg, spg;3830	unsigned six_byte, pg_len, hdr_len, bd_len;3831	int len, ret;3832	u16 fp = (u16)-1;3833	u8 bp = 0xff;3834	u8 buffer[64];3835	const u8 *p = buffer;3836 3837	six_byte = (cdb[0] == MODE_SELECT);3838	if (six_byte) {3839		if (scmd->cmd_len < 5) {3840			fp = 4;3841			goto invalid_fld;3842		}3843 3844		len = cdb[4];3845		hdr_len = 4;3846	} else {3847		if (scmd->cmd_len < 9) {3848			fp = 8;3849			goto invalid_fld;3850		}3851 3852		len = get_unaligned_be16(&cdb[7]);3853		hdr_len = 8;3854	}3855 3856	/* We only support PF=1, SP=0.  */3857	if ((cdb[1] & 0x11) != 0x10) {3858		fp = 1;3859		bp = (cdb[1] & 0x01) ? 1 : 5;3860		goto invalid_fld;3861	}3862 3863	/* Test early for possible overrun.  */3864	if (!scsi_sg_count(scmd) || scsi_sglist(scmd)->length < len)3865		goto invalid_param_len;3866 3867	/* Move past header and block descriptors.  */3868	if (len < hdr_len)3869		goto invalid_param_len;3870 3871	if (!sg_copy_to_buffer(scsi_sglist(scmd), scsi_sg_count(scmd),3872			       buffer, sizeof(buffer)))3873		goto invalid_param_len;3874 3875	if (six_byte)3876		bd_len = p[3];3877	else3878		bd_len = get_unaligned_be16(&p[6]);3879 3880	len -= hdr_len;3881	p += hdr_len;3882	if (len < bd_len)3883		goto invalid_param_len;3884	if (bd_len != 0 && bd_len != 8) {3885		fp = (six_byte) ? 3 : 6;3886		fp += bd_len + hdr_len;3887		goto invalid_param;3888	}3889 3890	len -= bd_len;3891	p += bd_len;3892	if (len == 0)3893		goto skip;3894 3895	/* Parse both possible formats for the mode page headers.  */3896	pg = p[0] & 0x3f;3897	if (p[0] & 0x40) {3898		if (len < 4)3899			goto invalid_param_len;3900 3901		spg = p[1];3902		pg_len = get_unaligned_be16(&p[2]);3903		p += 4;3904		len -= 4;3905	} else {3906		if (len < 2)3907			goto invalid_param_len;3908 3909		spg = 0;3910		pg_len = p[1];3911		p += 2;3912		len -= 2;3913	}3914 3915	/*3916	 * Supported subpages: all subpages and ATA feature sub-page f2h of3917	 * the control page.3918	 */3919	if (spg) {3920		switch (spg) {3921		case ALL_SUB_MPAGES:3922			/* All subpages is not supported for the control page */3923			if (pg == CONTROL_MPAGE) {3924				fp = (p[0] & 0x40) ? 1 : 0;3925				fp += hdr_len + bd_len;3926				goto invalid_param;3927			}3928			break;3929		case ATA_FEATURE_SUB_MPAGE:3930			if (qc->dev->flags & ATA_DFLAG_CDL &&3931			    pg == CONTROL_MPAGE)3932				break;3933			fallthrough;3934		default:3935			fp = (p[0] & 0x40) ? 1 : 0;3936			fp += hdr_len + bd_len;3937			goto invalid_param;3938		}3939	}3940	if (pg_len > len)3941		goto invalid_param_len;3942 3943	switch (pg) {3944	case CACHE_MPAGE:3945		if (ata_mselect_caching(qc, p, pg_len, &fp) < 0) {3946			fp += hdr_len + bd_len;3947			goto invalid_param;3948		}3949		break;3950	case CONTROL_MPAGE:3951		ret = ata_mselect_control(qc, spg, p, pg_len, &fp);3952		if (ret < 0) {3953			fp += hdr_len + bd_len;3954			goto invalid_param;3955		}3956		if (!ret)3957			goto skip; /* No ATA command to send */3958		break;3959	default:3960		/* Invalid page code */3961		fp = bd_len + hdr_len;3962		goto invalid_param;3963	}3964 3965	/*3966	 * Only one page has changeable data, so we only support setting one3967	 * page at a time.3968	 */3969	if (len > pg_len)3970		goto invalid_param;3971 3972	return 0;3973 3974 invalid_fld:3975	ata_scsi_set_invalid_field(qc->dev, scmd, fp, bp);3976	return 1;3977 3978 invalid_param:3979	ata_scsi_set_invalid_parameter(qc->dev, scmd, fp);3980	return 1;3981 3982 invalid_param_len:3983	/* "Parameter list length error" */3984	ata_scsi_set_sense(qc->dev, scmd, ILLEGAL_REQUEST, 0x1a, 0x0);3985	return 1;3986 3987 skip:3988	scmd->result = SAM_STAT_GOOD;3989	return 1;3990}3991 3992static u8 ata_scsi_trusted_op(u32 len, bool send, bool dma)3993{3994	if (len == 0)3995		return ATA_CMD_TRUSTED_NONDATA;3996	else if (send)3997		return dma ? ATA_CMD_TRUSTED_SND_DMA : ATA_CMD_TRUSTED_SND;3998	else3999		return dma ? ATA_CMD_TRUSTED_RCV_DMA : ATA_CMD_TRUSTED_RCV;4000}4001 4002static unsigned int ata_scsi_security_inout_xlat(struct ata_queued_cmd *qc)4003{4004	struct scsi_cmnd *scmd = qc->scsicmd;4005	const u8 *cdb = scmd->cmnd;4006	struct ata_taskfile *tf = &qc->tf;4007	u8 secp = cdb[1];4008	bool send = (cdb[0] == SECURITY_PROTOCOL_OUT);4009	u16 spsp = get_unaligned_be16(&cdb[2]);4010	u32 len = get_unaligned_be32(&cdb[6]);4011	bool dma = !(qc->dev->flags & ATA_DFLAG_PIO);4012 4013	/*4014	 * We don't support the ATA "security" protocol.4015	 */4016	if (secp == 0xef) {4017		ata_scsi_set_invalid_field(qc->dev, scmd, 1, 0);4018		return 1;4019	}4020 4021	if (cdb[4] & 7) { /* INC_512 */4022		if (len > 0xffff) {4023			ata_scsi_set_invalid_field(qc->dev, scmd, 6, 0);4024			return 1;4025		}4026	} else {4027		if (len > 0x01fffe00) {4028			ata_scsi_set_invalid_field(qc->dev, scmd, 6, 0);4029			return 1;4030		}4031 4032		/* convert to the sector-based ATA addressing */4033		len = (len + 511) / 512;4034	}4035 4036	tf->protocol = dma ? ATA_PROT_DMA : ATA_PROT_PIO;4037	tf->flags |= ATA_TFLAG_DEVICE | ATA_TFLAG_ISADDR | ATA_TFLAG_LBA;4038	if (send)4039		tf->flags |= ATA_TFLAG_WRITE;4040	tf->command = ata_scsi_trusted_op(len, send, dma);4041	tf->feature = secp;4042	tf->lbam = spsp & 0xff;4043	tf->lbah = spsp >> 8;4044 4045	if (len) {4046		tf->nsect = len & 0xff;4047		tf->lbal = len >> 8;4048	} else {4049		if (!send)4050			tf->lbah = (1 << 7);4051	}4052 4053	ata_qc_set_pc_nbytes(qc);4054	return 0;4055}4056 4057/**4058 *	ata_scsi_var_len_cdb_xlat - SATL variable length CDB to Handler4059 *	@qc: Command to be translated4060 *4061 *	Translate a SCSI variable length CDB to specified commands.4062 *	It checks a service action value in CDB to call corresponding handler.4063 *4064 *	RETURNS:4065 *	Zero on success, non-zero on failure4066 *4067 */4068static unsigned int ata_scsi_var_len_cdb_xlat(struct ata_queued_cmd *qc)4069{4070	struct scsi_cmnd *scmd = qc->scsicmd;4071	const u8 *cdb = scmd->cmnd;4072	const u16 sa = get_unaligned_be16(&cdb[8]);4073 4074	/*4075	 * if service action represents a ata pass-thru(32) command,4076	 * then pass it to ata_scsi_pass_thru handler.4077	 */4078	if (sa == ATA_32)4079		return ata_scsi_pass_thru(qc);4080 4081	/* unsupported service action */4082	return 1;4083}4084 4085/**4086 *	ata_get_xlat_func - check if SCSI to ATA translation is possible4087 *	@dev: ATA device4088 *	@cmd: SCSI command opcode to consider4089 *4090 *	Look up the SCSI command given, and determine whether the4091 *	SCSI command is to be translated or simulated.4092 *4093 *	RETURNS:4094 *	Pointer to translation function if possible, %NULL if not.4095 */4096 4097static inline ata_xlat_func_t ata_get_xlat_func(struct ata_device *dev, u8 cmd)4098{4099	switch (cmd) {4100	case READ_6:4101	case READ_10:4102	case READ_16:4103 4104	case WRITE_6:4105	case WRITE_10:4106	case WRITE_16:4107		return ata_scsi_rw_xlat;4108 4109	case WRITE_SAME_16:4110		return ata_scsi_write_same_xlat;4111 4112	case SYNCHRONIZE_CACHE:4113	case SYNCHRONIZE_CACHE_16:4114		if (ata_try_flush_cache(dev))4115			return ata_scsi_flush_xlat;4116		break;4117 4118	case VERIFY:4119	case VERIFY_16:4120		return ata_scsi_verify_xlat;4121 4122	case ATA_12:4123	case ATA_16:4124		return ata_scsi_pass_thru;4125 4126	case VARIABLE_LENGTH_CMD:4127		return ata_scsi_var_len_cdb_xlat;4128 4129	case MODE_SELECT:4130	case MODE_SELECT_10:4131		return ata_scsi_mode_select_xlat;4132 4133	case ZBC_IN:4134		return ata_scsi_zbc_in_xlat;4135 4136	case ZBC_OUT:4137		return ata_scsi_zbc_out_xlat;4138 4139	case SECURITY_PROTOCOL_IN:4140	case SECURITY_PROTOCOL_OUT:4141		if (!(dev->flags & ATA_DFLAG_TRUSTED))4142			break;4143		return ata_scsi_security_inout_xlat;4144 4145	case START_STOP:4146		return ata_scsi_start_stop_xlat;4147	}4148 4149	return NULL;4150}4151 4152int __ata_scsi_queuecmd(struct scsi_cmnd *scmd, struct ata_device *dev)4153{4154	struct ata_port *ap = dev->link->ap;4155	u8 scsi_op = scmd->cmnd[0];4156	ata_xlat_func_t xlat_func;4157 4158	/*4159	 * scsi_queue_rq() will defer commands if scsi_host_in_recovery().4160	 * However, this check is done without holding the ap->lock (a libata4161	 * specific lock), so we can have received an error irq since then,4162	 * therefore we must check if EH is pending, while holding ap->lock.4163	 */4164	if (ap->pflags & (ATA_PFLAG_EH_PENDING | ATA_PFLAG_EH_IN_PROGRESS))4165		return SCSI_MLQUEUE_DEVICE_BUSY;4166 4167	if (unlikely(!scmd->cmd_len))4168		goto bad_cdb_len;4169 4170	if (dev->class == ATA_DEV_ATA || dev->class == ATA_DEV_ZAC) {4171		if (unlikely(scmd->cmd_len > dev->cdb_len))4172			goto bad_cdb_len;4173 4174		xlat_func = ata_get_xlat_func(dev, scsi_op);4175	} else if (likely((scsi_op != ATA_16) || !atapi_passthru16)) {4176		/* relay SCSI command to ATAPI device */4177		int len = COMMAND_SIZE(scsi_op);4178 4179		if (unlikely(len > scmd->cmd_len ||4180			     len > dev->cdb_len ||4181			     scmd->cmd_len > ATAPI_CDB_LEN))4182			goto bad_cdb_len;4183 4184		xlat_func = atapi_xlat;4185	} else {4186		/* ATA_16 passthru, treat as an ATA command */4187		if (unlikely(scmd->cmd_len > 16))4188			goto bad_cdb_len;4189 4190		xlat_func = ata_get_xlat_func(dev, scsi_op);4191	}4192 4193	if (xlat_func)4194		return ata_scsi_translate(dev, scmd, xlat_func);4195 4196	ata_scsi_simulate(dev, scmd);4197 4198	return 0;4199 4200 bad_cdb_len:4201	scmd->result = DID_ERROR << 16;4202	scsi_done(scmd);4203	return 0;4204}4205 4206/**4207 *	ata_scsi_queuecmd - Issue SCSI cdb to libata-managed device4208 *	@shost: SCSI host of command to be sent4209 *	@cmd: SCSI command to be sent4210 *4211 *	In some cases, this function translates SCSI commands into4212 *	ATA taskfiles, and queues the taskfiles to be sent to4213 *	hardware.  In other cases, this function simulates a4214 *	SCSI device by evaluating and responding to certain4215 *	SCSI commands.  This creates the overall effect of4216 *	ATA and ATAPI devices appearing as SCSI devices.4217 *4218 *	LOCKING:4219 *	ATA host lock4220 *4221 *	RETURNS:4222 *	Return value from __ata_scsi_queuecmd() if @cmd can be queued,4223 *	0 otherwise.4224 */4225int ata_scsi_queuecmd(struct Scsi_Host *shost, struct scsi_cmnd *cmd)4226{4227	struct ata_port *ap;4228	struct ata_device *dev;4229	struct scsi_device *scsidev = cmd->device;4230	int rc = 0;4231	unsigned long irq_flags;4232 4233	ap = ata_shost_to_port(shost);4234 4235	spin_lock_irqsave(ap->lock, irq_flags);4236 4237	dev = ata_scsi_find_dev(ap, scsidev);4238	if (likely(dev))4239		rc = __ata_scsi_queuecmd(cmd, dev);4240	else {4241		cmd->result = (DID_BAD_TARGET << 16);4242		scsi_done(cmd);4243	}4244 4245	spin_unlock_irqrestore(ap->lock, irq_flags);4246 4247	return rc;4248}4249EXPORT_SYMBOL_GPL(ata_scsi_queuecmd);4250 4251/**4252 *	ata_scsi_simulate - simulate SCSI command on ATA device4253 *	@dev: the target device4254 *	@cmd: SCSI command being sent to device.4255 *4256 *	Interprets and directly executes a select list of SCSI commands4257 *	that can be handled internally.4258 *4259 *	LOCKING:4260 *	spin_lock_irqsave(host lock)4261 */4262 4263void ata_scsi_simulate(struct ata_device *dev, struct scsi_cmnd *cmd)4264{4265	struct ata_scsi_args args;4266	const u8 *scsicmd = cmd->cmnd;4267	u8 tmp8;4268 4269	args.dev = dev;4270	args.id = dev->id;4271	args.cmd = cmd;4272 4273	switch(scsicmd[0]) {4274	case INQUIRY:4275		if (scsicmd[1] & 2)		   /* is CmdDt set?  */4276			ata_scsi_set_invalid_field(dev, cmd, 1, 0xff);4277		else if ((scsicmd[1] & 1) == 0)    /* is EVPD clear? */4278			ata_scsi_rbuf_fill(&args, ata_scsiop_inq_std);4279		else switch (scsicmd[2]) {4280		case 0x00:4281			ata_scsi_rbuf_fill(&args, ata_scsiop_inq_00);4282			break;4283		case 0x80:4284			ata_scsi_rbuf_fill(&args, ata_scsiop_inq_80);4285			break;4286		case 0x83:4287			ata_scsi_rbuf_fill(&args, ata_scsiop_inq_83);4288			break;4289		case 0x89:4290			ata_scsi_rbuf_fill(&args, ata_scsiop_inq_89);4291			break;4292		case 0xb0:4293			ata_scsi_rbuf_fill(&args, ata_scsiop_inq_b0);4294			break;4295		case 0xb1:4296			ata_scsi_rbuf_fill(&args, ata_scsiop_inq_b1);4297			break;4298		case 0xb2:4299			ata_scsi_rbuf_fill(&args, ata_scsiop_inq_b2);4300			break;4301		case 0xb6:4302			if (dev->flags & ATA_DFLAG_ZAC)4303				ata_scsi_rbuf_fill(&args, ata_scsiop_inq_b6);4304			else4305				ata_scsi_set_invalid_field(dev, cmd, 2, 0xff);4306			break;4307		case 0xb9:4308			if (dev->cpr_log)4309				ata_scsi_rbuf_fill(&args, ata_scsiop_inq_b9);4310			else4311				ata_scsi_set_invalid_field(dev, cmd, 2, 0xff);4312			break;4313		default:4314			ata_scsi_set_invalid_field(dev, cmd, 2, 0xff);4315			break;4316		}4317		break;4318 4319	case MODE_SENSE:4320	case MODE_SENSE_10:4321		ata_scsi_rbuf_fill(&args, ata_scsiop_mode_sense);4322		break;4323 4324	case READ_CAPACITY:4325		ata_scsi_rbuf_fill(&args, ata_scsiop_read_cap);4326		break;4327 4328	case SERVICE_ACTION_IN_16:4329		if ((scsicmd[1] & 0x1f) == SAI_READ_CAPACITY_16)4330			ata_scsi_rbuf_fill(&args, ata_scsiop_read_cap);4331		else4332			ata_scsi_set_invalid_field(dev, cmd, 1, 0xff);4333		break;4334 4335	case REPORT_LUNS:4336		ata_scsi_rbuf_fill(&args, ata_scsiop_report_luns);4337		break;4338 4339	case REQUEST_SENSE:4340		ata_scsi_set_sense(dev, cmd, 0, 0, 0);4341		break;4342 4343	/* if we reach this, then writeback caching is disabled,4344	 * turning this into a no-op.4345	 */4346	case SYNCHRONIZE_CACHE:4347	case SYNCHRONIZE_CACHE_16:4348		fallthrough;4349 4350	/* no-op's, complete with success */4351	case REZERO_UNIT:4352	case SEEK_6:4353	case SEEK_10:4354	case TEST_UNIT_READY:4355		break;4356 4357	case SEND_DIAGNOSTIC:4358		tmp8 = scsicmd[1] & ~(1 << 3);4359		if (tmp8 != 0x4 || scsicmd[3] || scsicmd[4])4360			ata_scsi_set_invalid_field(dev, cmd, 1, 0xff);4361		break;4362 4363	case MAINTENANCE_IN:4364		if ((scsicmd[1] & 0x1f) == MI_REPORT_SUPPORTED_OPERATION_CODES)4365			ata_scsi_rbuf_fill(&args, ata_scsiop_maint_in);4366		else4367			ata_scsi_set_invalid_field(dev, cmd, 1, 0xff);4368		break;4369 4370	/* all other commands */4371	default:4372		ata_scsi_set_sense(dev, cmd, ILLEGAL_REQUEST, 0x20, 0x0);4373		/* "Invalid command operation code" */4374		break;4375	}4376 4377	scsi_done(cmd);4378}4379 4380int ata_scsi_add_hosts(struct ata_host *host, const struct scsi_host_template *sht)4381{4382	int i, rc;4383 4384	for (i = 0; i < host->n_ports; i++) {4385		struct ata_port *ap = host->ports[i];4386		struct Scsi_Host *shost;4387 4388		rc = -ENOMEM;4389		shost = scsi_host_alloc(sht, sizeof(struct ata_port *));4390		if (!shost)4391			goto err_alloc;4392 4393		shost->eh_noresume = 1;4394		*(struct ata_port **)&shost->hostdata[0] = ap;4395		ap->scsi_host = shost;4396 4397		shost->transportt = ata_scsi_transport_template;4398		shost->unique_id = ap->print_id;4399		shost->max_id = 16;4400		shost->max_lun = 1;4401		shost->max_channel = 1;4402		shost->max_cmd_len = 32;4403 4404		/* Schedule policy is determined by ->qc_defer()4405		 * callback and it needs to see every deferred qc.4406		 * Set host_blocked to 1 to prevent SCSI midlayer from4407		 * automatically deferring requests.4408		 */4409		shost->max_host_blocked = 1;4410 4411		rc = scsi_add_host_with_dma(shost, &ap->tdev, ap->host->dev);4412		if (rc)4413			goto err_alloc;4414	}4415 4416	return 0;4417 4418 err_alloc:4419	while (--i >= 0) {4420		struct Scsi_Host *shost = host->ports[i]->scsi_host;4421 4422		/* scsi_host_put() is in ata_devres_release() */4423		scsi_remove_host(shost);4424	}4425	return rc;4426}4427 4428#ifdef CONFIG_OF4429static void ata_scsi_assign_ofnode(struct ata_device *dev, struct ata_port *ap)4430{4431	struct scsi_device *sdev = dev->sdev;4432	struct device *d = ap->host->dev;4433	struct device_node *np = d->of_node;4434	struct device_node *child;4435 4436	for_each_available_child_of_node(np, child) {4437		int ret;4438		u32 val;4439 4440		ret = of_property_read_u32(child, "reg", &val);4441		if (ret)4442			continue;4443		if (val == dev->devno) {4444			dev_dbg(d, "found matching device node\n");4445			sdev->sdev_gendev.of_node = child;4446			return;4447		}4448	}4449}4450#else4451static void ata_scsi_assign_ofnode(struct ata_device *dev, struct ata_port *ap)4452{4453}4454#endif4455 4456void ata_scsi_scan_host(struct ata_port *ap, int sync)4457{4458	int tries = 5;4459	struct ata_device *last_failed_dev = NULL;4460	struct ata_link *link;4461	struct ata_device *dev;4462 4463 repeat:4464	ata_for_each_link(link, ap, EDGE) {4465		ata_for_each_dev(dev, link, ENABLED) {4466			struct scsi_device *sdev;4467			int channel = 0, id = 0;4468 4469			if (dev->sdev)4470				continue;4471 4472			if (ata_is_host_link(link))4473				id = dev->devno;4474			else4475				channel = link->pmp;4476 4477			sdev = __scsi_add_device(ap->scsi_host, channel, id, 0,4478						 NULL);4479			if (!IS_ERR(sdev)) {4480				dev->sdev = sdev;4481				ata_scsi_assign_ofnode(dev, ap);4482				scsi_device_put(sdev);4483			} else {4484				dev->sdev = NULL;4485			}4486		}4487	}4488 4489	/* If we scanned while EH was in progress or allocation4490	 * failure occurred, scan would have failed silently.  Check4491	 * whether all devices are attached.4492	 */4493	ata_for_each_link(link, ap, EDGE) {4494		ata_for_each_dev(dev, link, ENABLED) {4495			if (!dev->sdev)4496				goto exit_loop;4497		}4498	}4499 exit_loop:4500	if (!link)4501		return;4502 4503	/* we're missing some SCSI devices */4504	if (sync) {4505		/* If caller requested synchrnous scan && we've made4506		 * any progress, sleep briefly and repeat.4507		 */4508		if (dev != last_failed_dev) {4509			msleep(100);4510			last_failed_dev = dev;4511			goto repeat;4512		}4513 4514		/* We might be failing to detect boot device, give it4515		 * a few more chances.4516		 */4517		if (--tries) {4518			msleep(100);4519			goto repeat;4520		}4521 4522		ata_port_err(ap,4523			     "WARNING: synchronous SCSI scan failed without making any progress, switching to async\n");4524	}4525 4526	queue_delayed_work(system_long_wq, &ap->hotplug_task,4527			   round_jiffies_relative(HZ));4528}4529 4530/**4531 *	ata_scsi_offline_dev - offline attached SCSI device4532 *	@dev: ATA device to offline attached SCSI device for4533 *4534 *	This function is called from ata_eh_hotplug() and responsible4535 *	for taking the SCSI device attached to @dev offline.  This4536 *	function is called with host lock which protects dev->sdev4537 *	against clearing.4538 *4539 *	LOCKING:4540 *	spin_lock_irqsave(host lock)4541 *4542 *	RETURNS:4543 *	1 if attached SCSI device exists, 0 otherwise.4544 */4545int ata_scsi_offline_dev(struct ata_device *dev)4546{4547	if (dev->sdev) {4548		scsi_device_set_state(dev->sdev, SDEV_OFFLINE);4549		return 1;4550	}4551	return 0;4552}4553 4554/**4555 *	ata_scsi_remove_dev - remove attached SCSI device4556 *	@dev: ATA device to remove attached SCSI device for4557 *4558 *	This function is called from ata_eh_scsi_hotplug() and4559 *	responsible for removing the SCSI device attached to @dev.4560 *4561 *	LOCKING:4562 *	Kernel thread context (may sleep).4563 */4564static void ata_scsi_remove_dev(struct ata_device *dev)4565{4566	struct ata_port *ap = dev->link->ap;4567	struct scsi_device *sdev;4568	unsigned long flags;4569 4570	/* Alas, we need to grab scan_mutex to ensure SCSI device4571	 * state doesn't change underneath us and thus4572	 * scsi_device_get() always succeeds.  The mutex locking can4573	 * be removed if there is __scsi_device_get() interface which4574	 * increments reference counts regardless of device state.4575	 */4576	mutex_lock(&ap->scsi_host->scan_mutex);4577	spin_lock_irqsave(ap->lock, flags);4578 4579	/* clearing dev->sdev is protected by host lock */4580	sdev = dev->sdev;4581	dev->sdev = NULL;4582 4583	if (sdev) {4584		/* If user initiated unplug races with us, sdev can go4585		 * away underneath us after the host lock and4586		 * scan_mutex are released.  Hold onto it.4587		 */4588		if (scsi_device_get(sdev) == 0) {4589			/* The following ensures the attached sdev is4590			 * offline on return from ata_scsi_offline_dev()4591			 * regardless it wins or loses the race4592			 * against this function.4593			 */4594			scsi_device_set_state(sdev, SDEV_OFFLINE);4595		} else {4596			WARN_ON(1);4597			sdev = NULL;4598		}4599	}4600 4601	spin_unlock_irqrestore(ap->lock, flags);4602	mutex_unlock(&ap->scsi_host->scan_mutex);4603 4604	if (sdev) {4605		ata_dev_info(dev, "detaching (SCSI %s)\n",4606			     dev_name(&sdev->sdev_gendev));4607 4608		scsi_remove_device(sdev);4609		scsi_device_put(sdev);4610	}4611}4612 4613static void ata_scsi_handle_link_detach(struct ata_link *link)4614{4615	struct ata_port *ap = link->ap;4616	struct ata_device *dev;4617 4618	ata_for_each_dev(dev, link, ALL) {4619		unsigned long flags;4620 4621		spin_lock_irqsave(ap->lock, flags);4622		if (!(dev->flags & ATA_DFLAG_DETACHED)) {4623			spin_unlock_irqrestore(ap->lock, flags);4624			continue;4625		}4626 4627		dev->flags &= ~ATA_DFLAG_DETACHED;4628		spin_unlock_irqrestore(ap->lock, flags);4629 4630		ata_scsi_remove_dev(dev);4631	}4632}4633 4634/**4635 *	ata_scsi_media_change_notify - send media change event4636 *	@dev: Pointer to the disk device with media change event4637 *4638 *	Tell the block layer to send a media change notification4639 *	event.4640 *4641 * 	LOCKING:4642 * 	spin_lock_irqsave(host lock)4643 */4644void ata_scsi_media_change_notify(struct ata_device *dev)4645{4646	if (dev->sdev)4647		sdev_evt_send_simple(dev->sdev, SDEV_EVT_MEDIA_CHANGE,4648				     GFP_ATOMIC);4649}4650 4651/**4652 *	ata_scsi_hotplug - SCSI part of hotplug4653 *	@work: Pointer to ATA port to perform SCSI hotplug on4654 *4655 *	Perform SCSI part of hotplug.  It's executed from a separate4656 *	workqueue after EH completes.  This is necessary because SCSI4657 *	hot plugging requires working EH and hot unplugging is4658 *	synchronized with hot plugging with a mutex.4659 *4660 *	LOCKING:4661 *	Kernel thread context (may sleep).4662 */4663void ata_scsi_hotplug(struct work_struct *work)4664{4665	struct ata_port *ap =4666		container_of(work, struct ata_port, hotplug_task.work);4667	int i;4668 4669	if (ap->pflags & ATA_PFLAG_UNLOADING)4670		return;4671 4672	mutex_lock(&ap->scsi_scan_mutex);4673 4674	/* Unplug detached devices.  We cannot use link iterator here4675	 * because PMP links have to be scanned even if PMP is4676	 * currently not attached.  Iterate manually.4677	 */4678	ata_scsi_handle_link_detach(&ap->link);4679	if (ap->pmp_link)4680		for (i = 0; i < SATA_PMP_MAX_PORTS; i++)4681			ata_scsi_handle_link_detach(&ap->pmp_link[i]);4682 4683	/* scan for new ones */4684	ata_scsi_scan_host(ap, 0);4685 4686	mutex_unlock(&ap->scsi_scan_mutex);4687}4688 4689/**4690 *	ata_scsi_user_scan - indication for user-initiated bus scan4691 *	@shost: SCSI host to scan4692 *	@channel: Channel to scan4693 *	@id: ID to scan4694 *	@lun: LUN to scan4695 *4696 *	This function is called when user explicitly requests bus4697 *	scan.  Set probe pending flag and invoke EH.4698 *4699 *	LOCKING:4700 *	SCSI layer (we don't care)4701 *4702 *	RETURNS:4703 *	Zero.4704 */4705int ata_scsi_user_scan(struct Scsi_Host *shost, unsigned int channel,4706		       unsigned int id, u64 lun)4707{4708	struct ata_port *ap = ata_shost_to_port(shost);4709	unsigned long flags;4710	int devno, rc = 0;4711 4712	if (lun != SCAN_WILD_CARD && lun)4713		return -EINVAL;4714 4715	if (!sata_pmp_attached(ap)) {4716		if (channel != SCAN_WILD_CARD && channel)4717			return -EINVAL;4718		devno = id;4719	} else {4720		if (id != SCAN_WILD_CARD && id)4721			return -EINVAL;4722		devno = channel;4723	}4724 4725	spin_lock_irqsave(ap->lock, flags);4726 4727	if (devno == SCAN_WILD_CARD) {4728		struct ata_link *link;4729 4730		ata_for_each_link(link, ap, EDGE) {4731			struct ata_eh_info *ehi = &link->eh_info;4732			ehi->probe_mask |= ATA_ALL_DEVICES;4733			ehi->action |= ATA_EH_RESET;4734		}4735	} else {4736		struct ata_device *dev = ata_find_dev(ap, devno);4737 4738		if (dev) {4739			struct ata_eh_info *ehi = &dev->link->eh_info;4740			ehi->probe_mask |= 1 << dev->devno;4741			ehi->action |= ATA_EH_RESET;4742		} else4743			rc = -EINVAL;4744	}4745 4746	if (rc == 0) {4747		ata_port_schedule_eh(ap);4748		spin_unlock_irqrestore(ap->lock, flags);4749		ata_port_wait_eh(ap);4750	} else4751		spin_unlock_irqrestore(ap->lock, flags);4752 4753	return rc;4754}4755 4756/**4757 *	ata_scsi_dev_rescan - initiate scsi_rescan_device()4758 *	@work: Pointer to ATA port to perform scsi_rescan_device()4759 *4760 *	After ATA pass thru (SAT) commands are executed successfully,4761 *	libata need to propagate the changes to SCSI layer.4762 *4763 *	LOCKING:4764 *	Kernel thread context (may sleep).4765 */4766void ata_scsi_dev_rescan(struct work_struct *work)4767{4768	struct ata_port *ap =4769		container_of(work, struct ata_port, scsi_rescan_task.work);4770	struct ata_link *link;4771	struct ata_device *dev;4772	unsigned long flags;4773	bool do_resume;4774	int ret = 0;4775 4776	mutex_lock(&ap->scsi_scan_mutex);4777	spin_lock_irqsave(ap->lock, flags);4778 4779	ata_for_each_link(link, ap, EDGE) {4780		ata_for_each_dev(dev, link, ENABLED) {4781			struct scsi_device *sdev = dev->sdev;4782 4783			/*4784			 * If the port was suspended before this was scheduled,4785			 * bail out.4786			 */4787			if (ap->pflags & ATA_PFLAG_SUSPENDED)4788				goto unlock_ap;4789 4790			if (!sdev)4791				continue;4792			if (scsi_device_get(sdev))4793				continue;4794 4795			do_resume = dev->flags & ATA_DFLAG_RESUMING;4796 4797			spin_unlock_irqrestore(ap->lock, flags);4798			if (do_resume) {4799				ret = scsi_resume_device(sdev);4800				if (ret == -EWOULDBLOCK)4801					goto unlock_scan;4802				dev->flags &= ~ATA_DFLAG_RESUMING;4803			}4804			ret = scsi_rescan_device(sdev);4805			scsi_device_put(sdev);4806			spin_lock_irqsave(ap->lock, flags);4807 4808			if (ret)4809				goto unlock_ap;4810		}4811	}4812 4813unlock_ap:4814	spin_unlock_irqrestore(ap->lock, flags);4815unlock_scan:4816	mutex_unlock(&ap->scsi_scan_mutex);4817 4818	/* Reschedule with a delay if scsi_rescan_device() returned an error */4819	if (ret)4820		schedule_delayed_work(&ap->scsi_rescan_task,4821				      msecs_to_jiffies(5));4822}4823