2 * libata-scsi.c - helper library for ATA
4 * Maintained by: Jeff Garzik <jgarzik@pobox.com>
5 * Please ALWAYS copy linux-ide@vger.kernel.org
8 * Copyright 2003-2004 Red Hat, Inc. All rights reserved.
9 * Copyright 2003-2004 Jeff Garzik
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License as published by
14 * the Free Software Foundation; either version 2, or (at your option)
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
22 * You should have received a copy of the GNU General Public License
23 * along with this program; see the file COPYING. If not, write to
24 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
27 * libata documentation is available via 'make {ps|pdf}docs',
28 * as Documentation/DocBook/libata.*
30 * Hardware documentation available from
31 * - http://www.t10.org/
32 * - http://www.t13.org/
36 #include <linux/kernel.h>
37 #include <linux/blkdev.h>
38 #include <linux/spinlock.h>
39 #include <scsi/scsi.h>
40 #include <scsi/scsi_host.h>
41 #include <scsi/scsi_cmnd.h>
42 #include <scsi/scsi_eh.h>
43 #include <scsi/scsi_device.h>
44 #include <scsi/scsi_tcq.h>
45 #include <scsi/scsi_transport.h>
46 #include <linux/libata.h>
47 #include <linux/hdreg.h>
48 #include <linux/uaccess.h>
52 #define SECTOR_SIZE 512
54 typedef unsigned int (*ata_xlat_func_t)(struct ata_queued_cmd *qc);
56 static struct ata_device *__ata_scsi_find_dev(struct ata_port *ap,
57 const struct scsi_device *scsidev);
58 static struct ata_device *ata_scsi_find_dev(struct ata_port *ap,
59 const struct scsi_device *scsidev);
60 static int ata_scsi_user_scan(struct Scsi_Host *shost, unsigned int channel,
61 unsigned int id, unsigned int lun);
64 #define RW_RECOVERY_MPAGE 0x1
65 #define RW_RECOVERY_MPAGE_LEN 12
66 #define CACHE_MPAGE 0x8
67 #define CACHE_MPAGE_LEN 20
68 #define CONTROL_MPAGE 0xa
69 #define CONTROL_MPAGE_LEN 12
70 #define ALL_MPAGES 0x3f
71 #define ALL_SUB_MPAGES 0xff
74 static const u8 def_rw_recovery_mpage[RW_RECOVERY_MPAGE_LEN] = {
76 RW_RECOVERY_MPAGE_LEN - 2,
78 0, /* read retry count */
80 0, /* write retry count */
84 static const u8 def_cache_mpage[CACHE_MPAGE_LEN] = {
87 0, /* contains WCE, needs to be 0 for logic */
88 0, 0, 0, 0, 0, 0, 0, 0, 0,
89 0, /* contains DRA, needs to be 0 for logic */
93 static const u8 def_control_mpage[CONTROL_MPAGE_LEN] = {
95 CONTROL_MPAGE_LEN - 2,
96 2, /* DSENSE=0, GLTSD=1 */
97 0, /* [QAM+QERR may be 1, see 05-359r1] */
98 0, 0, 0, 0, 0xff, 0xff,
99 0, 30 /* extended self test time, see 05-359r1 */
103 * libata transport template. libata doesn't do real transport stuff.
104 * It just needs the eh_timed_out hook.
106 static struct scsi_transport_template ata_scsi_transport_template = {
107 .eh_strategy_handler = ata_scsi_error,
108 .eh_timed_out = ata_scsi_timed_out,
109 .user_scan = ata_scsi_user_scan,
113 static const struct {
116 } link_pm_policy[] = {
117 { NOT_AVAILABLE, "max_performance" },
118 { MIN_POWER, "min_power" },
119 { MAX_PERFORMANCE, "max_performance" },
120 { MEDIUM_POWER, "medium_power" },
123 static const char *ata_scsi_lpm_get(enum link_pm policy)
127 for (i = 0; i < ARRAY_SIZE(link_pm_policy); i++)
128 if (link_pm_policy[i].value == policy)
129 return link_pm_policy[i].name;
134 static ssize_t ata_scsi_lpm_put(struct class_device *class_dev,
135 const char *buf, size_t count)
137 struct Scsi_Host *shost = class_to_shost(class_dev);
138 struct ata_port *ap = ata_shost_to_port(shost);
139 enum link_pm policy = 0;
143 * we are skipping array location 0 on purpose - this
144 * is because a value of NOT_AVAILABLE is displayed
145 * to the user as max_performance, but when the user
146 * writes "max_performance", they actually want the
147 * value to match MAX_PERFORMANCE.
149 for (i = 1; i < ARRAY_SIZE(link_pm_policy); i++) {
150 const int len = strlen(link_pm_policy[i].name);
151 if (strncmp(link_pm_policy[i].name, buf, len) == 0 &&
153 policy = link_pm_policy[i].value;
160 ata_lpm_schedule(ap, policy);
165 ata_scsi_lpm_show(struct class_device *class_dev, char *buf)
167 struct Scsi_Host *shost = class_to_shost(class_dev);
168 struct ata_port *ap = ata_shost_to_port(shost);
170 ata_scsi_lpm_get(ap->pm_policy);
175 return snprintf(buf, 23, "%s\n", policy);
177 CLASS_DEVICE_ATTR(link_power_management_policy, S_IRUGO | S_IWUSR,
178 ata_scsi_lpm_show, ata_scsi_lpm_put);
179 EXPORT_SYMBOL_GPL(class_device_attr_link_power_management_policy);
181 static void ata_scsi_invalid_field(struct scsi_cmnd *cmd,
182 void (*done)(struct scsi_cmnd *))
184 ata_scsi_set_sense(cmd, ILLEGAL_REQUEST, 0x24, 0x0);
185 /* "Invalid field in cbd" */
190 * ata_std_bios_param - generic bios head/sector/cylinder calculator used by sd.
191 * @sdev: SCSI device for which BIOS geometry is to be determined
192 * @bdev: block device associated with @sdev
193 * @capacity: capacity of SCSI device
194 * @geom: location to which geometry will be output
196 * Generic bios head/sector/cylinder calculator
197 * used by sd. Most BIOSes nowadays expect a XXX/255/16 (CHS)
198 * mapping. Some situations may arise where the disk is not
199 * bootable if this is not used.
202 * Defined by the SCSI layer. We don't really care.
207 int ata_std_bios_param(struct scsi_device *sdev, struct block_device *bdev,
208 sector_t capacity, int geom[])
212 sector_div(capacity, 255*63);
219 * ata_get_identity - Handler for HDIO_GET_IDENTITY ioctl
220 * @sdev: SCSI device to get identify data for
221 * @arg: User buffer area for identify data
224 * Defined by the SCSI layer. We don't really care.
227 * Zero on success, negative errno on error.
229 static int ata_get_identity(struct scsi_device *sdev, void __user *arg)
231 struct ata_port *ap = ata_shost_to_port(sdev->host);
232 struct ata_device *dev = ata_scsi_find_dev(ap, sdev);
233 u16 __user *dst = arg;
239 if (copy_to_user(dst, dev->id, ATA_ID_WORDS * sizeof(u16)))
242 ata_id_string(dev->id, buf, ATA_ID_PROD, ATA_ID_PROD_LEN);
243 if (copy_to_user(dst + ATA_ID_PROD, buf, ATA_ID_PROD_LEN))
246 ata_id_string(dev->id, buf, ATA_ID_FW_REV, ATA_ID_FW_REV_LEN);
247 if (copy_to_user(dst + ATA_ID_FW_REV, buf, ATA_ID_FW_REV_LEN))
250 ata_id_string(dev->id, buf, ATA_ID_SERNO, ATA_ID_SERNO_LEN);
251 if (copy_to_user(dst + ATA_ID_SERNO, buf, ATA_ID_SERNO_LEN))
258 * ata_cmd_ioctl - Handler for HDIO_DRIVE_CMD ioctl
259 * @scsidev: Device to which we are issuing command
260 * @arg: User provided data for issuing command
263 * Defined by the SCSI layer. We don't really care.
266 * Zero on success, negative errno on error.
268 int ata_cmd_ioctl(struct scsi_device *scsidev, void __user *arg)
271 u8 scsi_cmd[MAX_COMMAND_SIZE];
272 u8 args[4], *argbuf = NULL, *sensebuf = NULL;
274 enum dma_data_direction data_dir;
280 if (copy_from_user(args, arg, sizeof(args)))
283 sensebuf = kzalloc(SCSI_SENSE_BUFFERSIZE, GFP_NOIO);
287 memset(scsi_cmd, 0, sizeof(scsi_cmd));
290 argsize = SECTOR_SIZE * args[3];
291 argbuf = kmalloc(argsize, GFP_KERNEL);
292 if (argbuf == NULL) {
297 scsi_cmd[1] = (4 << 1); /* PIO Data-in */
298 scsi_cmd[2] = 0x0e; /* no off.line or cc, read from dev,
299 block count in sector count field */
300 data_dir = DMA_FROM_DEVICE;
302 scsi_cmd[1] = (3 << 1); /* Non-data */
303 scsi_cmd[2] = 0x20; /* cc but no off.line or data xfer */
307 scsi_cmd[0] = ATA_16;
309 scsi_cmd[4] = args[2];
310 if (args[0] == WIN_SMART) { /* hack -- ide driver does this too... */
311 scsi_cmd[6] = args[3];
312 scsi_cmd[8] = args[1];
316 scsi_cmd[6] = args[1];
318 scsi_cmd[14] = args[0];
320 /* Good values for timeout and retries? Values below
321 from scsi_ioctl_send_command() for default case... */
322 cmd_result = scsi_execute(scsidev, scsi_cmd, data_dir, argbuf, argsize,
323 sensebuf, (10*HZ), 5, 0);
325 if (driver_byte(cmd_result) == DRIVER_SENSE) {/* sense data available */
326 u8 *desc = sensebuf + 8;
327 cmd_result &= ~(0xFF<<24); /* DRIVER_SENSE is not an error */
329 /* If we set cc then ATA pass-through will cause a
330 * check condition even if no error. Filter that. */
331 if (cmd_result & SAM_STAT_CHECK_CONDITION) {
332 struct scsi_sense_hdr sshdr;
333 scsi_normalize_sense(sensebuf, SCSI_SENSE_BUFFERSIZE,
335 if (sshdr.sense_key == 0 &&
336 sshdr.asc == 0 && sshdr.ascq == 0)
337 cmd_result &= ~SAM_STAT_CHECK_CONDITION;
340 /* Send userspace a few ATA registers (same as drivers/ide) */
341 if (sensebuf[0] == 0x72 && /* format is "descriptor" */
342 desc[0] == 0x09) { /* code is "ATA Descriptor" */
343 args[0] = desc[13]; /* status */
344 args[1] = desc[3]; /* error */
345 args[2] = desc[5]; /* sector count (0:7) */
346 if (copy_to_user(arg, args, sizeof(args)))
358 && copy_to_user(arg + sizeof(args), argbuf, argsize))
367 * ata_task_ioctl - Handler for HDIO_DRIVE_TASK ioctl
368 * @scsidev: Device to which we are issuing command
369 * @arg: User provided data for issuing command
372 * Defined by the SCSI layer. We don't really care.
375 * Zero on success, negative errno on error.
377 int ata_task_ioctl(struct scsi_device *scsidev, void __user *arg)
380 u8 scsi_cmd[MAX_COMMAND_SIZE];
381 u8 args[7], *sensebuf = NULL;
387 if (copy_from_user(args, arg, sizeof(args)))
390 sensebuf = kzalloc(SCSI_SENSE_BUFFERSIZE, GFP_NOIO);
394 memset(scsi_cmd, 0, sizeof(scsi_cmd));
395 scsi_cmd[0] = ATA_16;
396 scsi_cmd[1] = (3 << 1); /* Non-data */
397 scsi_cmd[2] = 0x20; /* cc but no off.line or data xfer */
398 scsi_cmd[4] = args[1];
399 scsi_cmd[6] = args[2];
400 scsi_cmd[8] = args[3];
401 scsi_cmd[10] = args[4];
402 scsi_cmd[12] = args[5];
403 scsi_cmd[13] = args[6] & 0x4f;
404 scsi_cmd[14] = args[0];
406 /* Good values for timeout and retries? Values below
407 from scsi_ioctl_send_command() for default case... */
408 cmd_result = scsi_execute(scsidev, scsi_cmd, DMA_NONE, NULL, 0,
409 sensebuf, (10*HZ), 5, 0);
411 if (driver_byte(cmd_result) == DRIVER_SENSE) {/* sense data available */
412 u8 *desc = sensebuf + 8;
413 cmd_result &= ~(0xFF<<24); /* DRIVER_SENSE is not an error */
415 /* If we set cc then ATA pass-through will cause a
416 * check condition even if no error. Filter that. */
417 if (cmd_result & SAM_STAT_CHECK_CONDITION) {
418 struct scsi_sense_hdr sshdr;
419 scsi_normalize_sense(sensebuf, SCSI_SENSE_BUFFERSIZE,
421 if (sshdr.sense_key == 0 &&
422 sshdr.asc == 0 && sshdr.ascq == 0)
423 cmd_result &= ~SAM_STAT_CHECK_CONDITION;
426 /* Send userspace ATA registers */
427 if (sensebuf[0] == 0x72 && /* format is "descriptor" */
428 desc[0] == 0x09) {/* code is "ATA Descriptor" */
429 args[0] = desc[13]; /* status */
430 args[1] = desc[3]; /* error */
431 args[2] = desc[5]; /* sector count (0:7) */
432 args[3] = desc[7]; /* lbal */
433 args[4] = desc[9]; /* lbam */
434 args[5] = desc[11]; /* lbah */
435 args[6] = desc[12]; /* select */
436 if (copy_to_user(arg, args, sizeof(args)))
451 int ata_scsi_ioctl(struct scsi_device *scsidev, int cmd, void __user *arg)
453 int val = -EINVAL, rc = -EINVAL;
456 case ATA_IOC_GET_IO32:
458 if (copy_to_user(arg, &val, 1))
462 case ATA_IOC_SET_IO32:
463 val = (unsigned long) arg;
468 case HDIO_GET_IDENTITY:
469 return ata_get_identity(scsidev, arg);
472 if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO))
474 return ata_cmd_ioctl(scsidev, arg);
476 case HDIO_DRIVE_TASK:
477 if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO))
479 return ata_task_ioctl(scsidev, arg);
490 * ata_scsi_qc_new - acquire new ata_queued_cmd reference
491 * @dev: ATA device to which the new command is attached
492 * @cmd: SCSI command that originated this ATA command
493 * @done: SCSI command completion function
495 * Obtain a reference to an unused ata_queued_cmd structure,
496 * which is the basic libata structure representing a single
497 * ATA command sent to the hardware.
499 * If a command was available, fill in the SCSI-specific
500 * portions of the structure with information on the
504 * spin_lock_irqsave(host lock)
507 * Command allocated, or %NULL if none available.
509 static struct ata_queued_cmd *ata_scsi_qc_new(struct ata_device *dev,
510 struct scsi_cmnd *cmd,
511 void (*done)(struct scsi_cmnd *))
513 struct ata_queued_cmd *qc;
515 qc = ata_qc_new_init(dev);
520 qc->__sg = scsi_sglist(cmd);
521 qc->n_elem = scsi_sg_count(cmd);
523 cmd->result = (DID_OK << 16) | (QUEUE_FULL << 1);
531 * ata_dump_status - user friendly display of error info
532 * @id: id of the port in question
533 * @tf: ptr to filled out taskfile
535 * Decode and dump the ATA error/status registers for the user so
536 * that they have some idea what really happened at the non
537 * make-believe layer.
540 * inherited from caller
542 static void ata_dump_status(unsigned id, struct ata_taskfile *tf)
544 u8 stat = tf->command, err = tf->feature;
546 printk(KERN_WARNING "ata%u: status=0x%02x { ", id, stat);
547 if (stat & ATA_BUSY) {
548 printk("Busy }\n"); /* Data is not valid in this case */
550 if (stat & 0x40) printk("DriveReady ");
551 if (stat & 0x20) printk("DeviceFault ");
552 if (stat & 0x10) printk("SeekComplete ");
553 if (stat & 0x08) printk("DataRequest ");
554 if (stat & 0x04) printk("CorrectedError ");
555 if (stat & 0x02) printk("Index ");
556 if (stat & 0x01) printk("Error ");
560 printk(KERN_WARNING "ata%u: error=0x%02x { ", id, err);
561 if (err & 0x04) printk("DriveStatusError ");
563 if (err & 0x04) printk("BadCRC ");
564 else printk("Sector ");
566 if (err & 0x40) printk("UncorrectableError ");
567 if (err & 0x10) printk("SectorIdNotFound ");
568 if (err & 0x02) printk("TrackZeroNotFound ");
569 if (err & 0x01) printk("AddrMarkNotFound ");
576 * ata_to_sense_error - convert ATA error to SCSI error
577 * @id: ATA device number
578 * @drv_stat: value contained in ATA status register
579 * @drv_err: value contained in ATA error register
580 * @sk: the sense key we'll fill out
581 * @asc: the additional sense code we'll fill out
582 * @ascq: the additional sense code qualifier we'll fill out
583 * @verbose: be verbose
585 * Converts an ATA error into a SCSI error. Fill out pointers to
586 * SK, ASC, and ASCQ bytes for later use in fixed or descriptor
587 * format sense blocks.
590 * spin_lock_irqsave(host lock)
592 static void ata_to_sense_error(unsigned id, u8 drv_stat, u8 drv_err, u8 *sk,
593 u8 *asc, u8 *ascq, int verbose)
597 /* Based on the 3ware driver translation table */
598 static const unsigned char sense_table[][4] = {
600 {0xd1, ABORTED_COMMAND, 0x00, 0x00}, // Device busy Aborted command
602 {0xd0, ABORTED_COMMAND, 0x00, 0x00}, // Device busy Aborted command
604 {0x61, HARDWARE_ERROR, 0x00, 0x00}, // Device fault Hardware error
605 /* ICRC|ABRT */ /* NB: ICRC & !ABRT is BBD */
606 {0x84, ABORTED_COMMAND, 0x47, 0x00}, // Data CRC error SCSI parity error
607 /* MC|ID|ABRT|TRK0|MARK */
608 {0x37, NOT_READY, 0x04, 0x00}, // Unit offline Not ready
610 {0x09, NOT_READY, 0x04, 0x00}, // Unrecovered disk error Not ready
611 /* Bad address mark */
612 {0x01, MEDIUM_ERROR, 0x13, 0x00}, // Address mark not found Address mark not found for data field
614 {0x02, HARDWARE_ERROR, 0x00, 0x00}, // Track 0 not found Hardware error
616 {0x04, ABORTED_COMMAND, 0x00, 0x00}, // Aborted command Aborted command
617 /* Media change request */
618 {0x08, NOT_READY, 0x04, 0x00}, // Media change request FIXME: faking offline
620 {0x10, ABORTED_COMMAND, 0x14, 0x00}, // ID not found Recorded entity not found
622 {0x08, NOT_READY, 0x04, 0x00}, // Media change FIXME: faking offline
624 {0x40, MEDIUM_ERROR, 0x11, 0x04}, // Uncorrectable ECC error Unrecovered read error
625 /* BBD - block marked bad */
626 {0x80, MEDIUM_ERROR, 0x11, 0x04}, // Block marked bad Medium error, unrecovered read error
627 {0xFF, 0xFF, 0xFF, 0xFF}, // END mark
629 static const unsigned char stat_table[][4] = {
630 /* Must be first because BUSY means no other bits valid */
631 {0x80, ABORTED_COMMAND, 0x47, 0x00}, // Busy, fake parity for now
632 {0x20, HARDWARE_ERROR, 0x00, 0x00}, // Device fault
633 {0x08, ABORTED_COMMAND, 0x47, 0x00}, // Timed out in xfer, fake parity for now
634 {0x04, RECOVERED_ERROR, 0x11, 0x00}, // Recovered ECC error Medium error, recovered
635 {0xFF, 0xFF, 0xFF, 0xFF}, // END mark
639 * Is this an error we can process/parse
641 if (drv_stat & ATA_BUSY) {
642 drv_err = 0; /* Ignore the err bits, they're invalid */
646 /* Look for drv_err */
647 for (i = 0; sense_table[i][0] != 0xFF; i++) {
648 /* Look for best matches first */
649 if ((sense_table[i][0] & drv_err) ==
651 *sk = sense_table[i][1];
652 *asc = sense_table[i][2];
653 *ascq = sense_table[i][3];
657 /* No immediate match */
659 printk(KERN_WARNING "ata%u: no sense translation for "
660 "error 0x%02x\n", id, drv_err);
663 /* Fall back to interpreting status bits */
664 for (i = 0; stat_table[i][0] != 0xFF; i++) {
665 if (stat_table[i][0] & drv_stat) {
666 *sk = stat_table[i][1];
667 *asc = stat_table[i][2];
668 *ascq = stat_table[i][3];
672 /* No error? Undecoded? */
674 printk(KERN_WARNING "ata%u: no sense translation for "
675 "status: 0x%02x\n", id, drv_stat);
677 /* We need a sensible error return here, which is tricky, and one
678 that won't cause people to do things like return a disk wrongly */
679 *sk = ABORTED_COMMAND;
685 printk(KERN_ERR "ata%u: translated ATA stat/err 0x%02x/%02x "
686 "to SCSI SK/ASC/ASCQ 0x%x/%02x/%02x\n",
687 id, drv_stat, drv_err, *sk, *asc, *ascq);
692 * ata_gen_passthru_sense - Generate check condition sense block.
693 * @qc: Command that completed.
695 * This function is specific to the ATA descriptor format sense
696 * block specified for the ATA pass through commands. Regardless
697 * of whether the command errored or not, return a sense
698 * block. Copy all controller registers into the sense
699 * block. Clear sense key, ASC & ASCQ if there is no error.
704 static void ata_gen_passthru_sense(struct ata_queued_cmd *qc)
706 struct scsi_cmnd *cmd = qc->scsicmd;
707 struct ata_taskfile *tf = &qc->result_tf;
708 unsigned char *sb = cmd->sense_buffer;
709 unsigned char *desc = sb + 8;
710 int verbose = qc->ap->ops->error_handler == NULL;
712 memset(sb, 0, SCSI_SENSE_BUFFERSIZE);
714 cmd->result = (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION;
717 * Use ata_to_sense_error() to map status register bits
718 * onto sense key, asc & ascq.
721 tf->command & (ATA_BUSY | ATA_DF | ATA_ERR | ATA_DRQ)) {
722 ata_to_sense_error(qc->ap->print_id, tf->command, tf->feature,
723 &sb[1], &sb[2], &sb[3], verbose);
728 * Sense data is current and format is descriptor.
734 /* set length of additional sense data */
739 * Copy registers into sense buffer.
742 desc[3] = tf->feature; /* == error reg */
747 desc[12] = tf->device;
748 desc[13] = tf->command; /* == status reg */
751 * Fill in Extend bit, and the high order bytes
754 if (tf->flags & ATA_TFLAG_LBA48) {
756 desc[4] = tf->hob_nsect;
757 desc[6] = tf->hob_lbal;
758 desc[8] = tf->hob_lbam;
759 desc[10] = tf->hob_lbah;
764 * ata_gen_ata_sense - generate a SCSI fixed sense block
765 * @qc: Command that we are erroring out
767 * Generate sense block for a failed ATA command @qc. Descriptor
768 * format is used to accomodate LBA48 block address.
773 static void ata_gen_ata_sense(struct ata_queued_cmd *qc)
775 struct ata_device *dev = qc->dev;
776 struct scsi_cmnd *cmd = qc->scsicmd;
777 struct ata_taskfile *tf = &qc->result_tf;
778 unsigned char *sb = cmd->sense_buffer;
779 unsigned char *desc = sb + 8;
780 int verbose = qc->ap->ops->error_handler == NULL;
783 memset(sb, 0, SCSI_SENSE_BUFFERSIZE);
785 cmd->result = (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION;
787 /* sense data is current and format is descriptor */
790 /* Use ata_to_sense_error() to map status register bits
791 * onto sense key, asc & ascq.
794 tf->command & (ATA_BUSY | ATA_DF | ATA_ERR | ATA_DRQ)) {
795 ata_to_sense_error(qc->ap->print_id, tf->command, tf->feature,
796 &sb[1], &sb[2], &sb[3], verbose);
800 block = ata_tf_read_block(&qc->result_tf, dev);
802 /* information sense data descriptor */
807 desc[2] |= 0x80; /* valid */
808 desc[6] = block >> 40;
809 desc[7] = block >> 32;
810 desc[8] = block >> 24;
811 desc[9] = block >> 16;
812 desc[10] = block >> 8;
816 static void ata_scsi_sdev_config(struct scsi_device *sdev)
818 sdev->use_10_for_rw = 1;
819 sdev->use_10_for_ms = 1;
821 /* Schedule policy is determined by ->qc_defer() callback and
822 * it needs to see every deferred qc. Set dev_blocked to 1 to
823 * prevent SCSI midlayer from automatically deferring
826 sdev->max_device_blocked = 1;
829 static void ata_scsi_dev_config(struct scsi_device *sdev,
830 struct ata_device *dev)
832 /* configure max sectors */
833 blk_queue_max_sectors(sdev->request_queue, dev->max_sectors);
835 /* SATA DMA transfers must be multiples of 4 byte, so
836 * we need to pad ATAPI transfers using an extra sg.
837 * Decrement max hw segments accordingly.
839 if (dev->class == ATA_DEV_ATAPI) {
840 struct request_queue *q = sdev->request_queue;
841 blk_queue_max_hw_segments(q, q->max_hw_segments - 1);
844 if (dev->flags & ATA_DFLAG_AN)
845 set_bit(SDEV_EVT_MEDIA_CHANGE, sdev->supported_events);
847 if (dev->flags & ATA_DFLAG_NCQ) {
850 depth = min(sdev->host->can_queue, ata_id_queue_depth(dev->id));
851 depth = min(ATA_MAX_QUEUE - 1, depth);
852 scsi_adjust_queue_depth(sdev, MSG_SIMPLE_TAG, depth);
857 * ata_scsi_slave_config - Set SCSI device attributes
858 * @sdev: SCSI device to examine
860 * This is called before we actually start reading
861 * and writing to the device, to configure certain
862 * SCSI mid-layer behaviors.
865 * Defined by SCSI layer. We don't really care.
868 int ata_scsi_slave_config(struct scsi_device *sdev)
870 struct ata_port *ap = ata_shost_to_port(sdev->host);
871 struct ata_device *dev = __ata_scsi_find_dev(ap, sdev);
873 ata_scsi_sdev_config(sdev);
875 sdev->manage_start_stop = 1;
878 ata_scsi_dev_config(sdev, dev);
880 return 0; /* scsi layer doesn't check return value, sigh */
884 * ata_scsi_slave_destroy - SCSI device is about to be destroyed
885 * @sdev: SCSI device to be destroyed
887 * @sdev is about to be destroyed for hot/warm unplugging. If
888 * this unplugging was initiated by libata as indicated by NULL
889 * dev->sdev, this function doesn't have to do anything.
890 * Otherwise, SCSI layer initiated warm-unplug is in progress.
891 * Clear dev->sdev, schedule the device for ATA detach and invoke
895 * Defined by SCSI layer. We don't really care.
897 void ata_scsi_slave_destroy(struct scsi_device *sdev)
899 struct ata_port *ap = ata_shost_to_port(sdev->host);
901 struct ata_device *dev;
903 if (!ap->ops->error_handler)
906 spin_lock_irqsave(ap->lock, flags);
907 dev = __ata_scsi_find_dev(ap, sdev);
908 if (dev && dev->sdev) {
909 /* SCSI device already in CANCEL state, no need to offline it */
911 dev->flags |= ATA_DFLAG_DETACH;
912 ata_port_schedule_eh(ap);
914 spin_unlock_irqrestore(ap->lock, flags);
918 * ata_scsi_change_queue_depth - SCSI callback for queue depth config
919 * @sdev: SCSI device to configure queue depth for
920 * @queue_depth: new queue depth
922 * This is libata standard hostt->change_queue_depth callback.
923 * SCSI will call into this callback when user tries to set queue
927 * SCSI layer (we don't care)
930 * Newly configured queue depth.
932 int ata_scsi_change_queue_depth(struct scsi_device *sdev, int queue_depth)
934 struct ata_port *ap = ata_shost_to_port(sdev->host);
935 struct ata_device *dev;
938 if (queue_depth < 1 || queue_depth == sdev->queue_depth)
939 return sdev->queue_depth;
941 dev = ata_scsi_find_dev(ap, sdev);
942 if (!dev || !ata_dev_enabled(dev))
943 return sdev->queue_depth;
946 spin_lock_irqsave(ap->lock, flags);
947 dev->flags &= ~ATA_DFLAG_NCQ_OFF;
948 if (queue_depth == 1 || !ata_ncq_enabled(dev)) {
949 dev->flags |= ATA_DFLAG_NCQ_OFF;
952 spin_unlock_irqrestore(ap->lock, flags);
954 /* limit and apply queue depth */
955 queue_depth = min(queue_depth, sdev->host->can_queue);
956 queue_depth = min(queue_depth, ata_id_queue_depth(dev->id));
957 queue_depth = min(queue_depth, ATA_MAX_QUEUE - 1);
959 if (sdev->queue_depth == queue_depth)
962 scsi_adjust_queue_depth(sdev, MSG_SIMPLE_TAG, queue_depth);
966 /* XXX: for spindown warning */
967 static void ata_delayed_done_timerfn(unsigned long arg)
969 struct scsi_cmnd *scmd = (void *)arg;
971 scmd->scsi_done(scmd);
974 /* XXX: for spindown warning */
975 static void ata_delayed_done(struct scsi_cmnd *scmd)
977 static struct timer_list timer;
979 setup_timer(&timer, ata_delayed_done_timerfn, (unsigned long)scmd);
980 mod_timer(&timer, jiffies + 5 * HZ);
984 * ata_scsi_start_stop_xlat - Translate SCSI START STOP UNIT command
985 * @qc: Storage for translated ATA taskfile
987 * Sets up an ATA taskfile to issue STANDBY (to stop) or READ VERIFY
988 * (to start). Perhaps these commands should be preceded by
989 * CHECK POWER MODE to see what power mode the device is already in.
990 * [See SAT revision 5 at www.t10.org]
993 * spin_lock_irqsave(host lock)
996 * Zero on success, non-zero on error.
998 static unsigned int ata_scsi_start_stop_xlat(struct ata_queued_cmd *qc)
1000 struct scsi_cmnd *scmd = qc->scsicmd;
1001 struct ata_taskfile *tf = &qc->tf;
1002 const u8 *cdb = scmd->cmnd;
1004 if (scmd->cmd_len < 5)
1007 tf->flags |= ATA_TFLAG_DEVICE | ATA_TFLAG_ISADDR;
1008 tf->protocol = ATA_PROT_NODATA;
1010 ; /* ignore IMMED bit, violates sat-r05 */
1013 goto invalid_fld; /* LOEJ bit set not supported */
1014 if (((cdb[4] >> 4) & 0xf) != 0)
1015 goto invalid_fld; /* power conditions not supported */
1017 if (qc->dev->horkage & ATA_HORKAGE_SKIP_PM) {
1018 /* the device lacks PM support, finish without doing anything */
1019 scmd->result = SAM_STAT_GOOD;
1024 tf->nsect = 1; /* 1 sector, lba=0 */
1026 if (qc->dev->flags & ATA_DFLAG_LBA) {
1027 tf->flags |= ATA_TFLAG_LBA;
1032 tf->device |= ATA_LBA;
1035 tf->lbal = 0x1; /* sect */
1036 tf->lbam = 0x0; /* cyl low */
1037 tf->lbah = 0x0; /* cyl high */
1040 tf->command = ATA_CMD_VERIFY; /* READ VERIFY */
1042 /* XXX: This is for backward compatibility, will be
1043 * removed. Read Documentation/feature-removal-schedule.txt
1046 if ((qc->dev->flags & ATA_DFLAG_SPUNDOWN) &&
1047 (system_state == SYSTEM_HALT ||
1048 system_state == SYSTEM_POWER_OFF)) {
1049 static unsigned long warned;
1051 if (!test_and_set_bit(0, &warned)) {
1052 ata_dev_printk(qc->dev, KERN_WARNING,
1053 "DISK MIGHT NOT BE SPUN DOWN PROPERLY. "
1054 "UPDATE SHUTDOWN UTILITY\n");
1055 ata_dev_printk(qc->dev, KERN_WARNING,
1056 "For more info, visit "
1057 "http://linux-ata.org/shutdown.html\n");
1059 /* ->scsi_done is not used, use it for
1060 * delayed completion.
1062 scmd->scsi_done = qc->scsidone;
1063 qc->scsidone = ata_delayed_done;
1065 scmd->result = SAM_STAT_GOOD;
1069 /* Issue ATA STANDBY IMMEDIATE command */
1070 tf->command = ATA_CMD_STANDBYNOW1;
1074 * Standby and Idle condition timers could be implemented but that
1075 * would require libata to implement the Power condition mode page
1076 * and allow the user to change it. Changing mode pages requires
1077 * MODE SELECT to be implemented.
1083 ata_scsi_set_sense(scmd, ILLEGAL_REQUEST, 0x24, 0x0);
1084 /* "Invalid field in cbd" */
1090 * ata_scsi_flush_xlat - Translate SCSI SYNCHRONIZE CACHE command
1091 * @qc: Storage for translated ATA taskfile
1093 * Sets up an ATA taskfile to issue FLUSH CACHE or
1097 * spin_lock_irqsave(host lock)
1100 * Zero on success, non-zero on error.
1102 static unsigned int ata_scsi_flush_xlat(struct ata_queued_cmd *qc)
1104 struct ata_taskfile *tf = &qc->tf;
1106 tf->flags |= ATA_TFLAG_DEVICE;
1107 tf->protocol = ATA_PROT_NODATA;
1109 if (qc->dev->flags & ATA_DFLAG_FLUSH_EXT)
1110 tf->command = ATA_CMD_FLUSH_EXT;
1112 tf->command = ATA_CMD_FLUSH;
1114 /* flush is critical for IO integrity, consider it an IO command */
1115 qc->flags |= ATA_QCFLAG_IO;
1121 * scsi_6_lba_len - Get LBA and transfer length
1122 * @cdb: SCSI command to translate
1124 * Calculate LBA and transfer length for 6-byte commands.
1128 * @plen: the transfer length
1130 static void scsi_6_lba_len(const u8 *cdb, u64 *plba, u32 *plen)
1135 VPRINTK("six-byte command\n");
1137 lba |= ((u64)(cdb[1] & 0x1f)) << 16;
1138 lba |= ((u64)cdb[2]) << 8;
1139 lba |= ((u64)cdb[3]);
1148 * scsi_10_lba_len - Get LBA and transfer length
1149 * @cdb: SCSI command to translate
1151 * Calculate LBA and transfer length for 10-byte commands.
1155 * @plen: the transfer length
1157 static void scsi_10_lba_len(const u8 *cdb, u64 *plba, u32 *plen)
1162 VPRINTK("ten-byte command\n");
1164 lba |= ((u64)cdb[2]) << 24;
1165 lba |= ((u64)cdb[3]) << 16;
1166 lba |= ((u64)cdb[4]) << 8;
1167 lba |= ((u64)cdb[5]);
1169 len |= ((u32)cdb[7]) << 8;
1170 len |= ((u32)cdb[8]);
1177 * scsi_16_lba_len - Get LBA and transfer length
1178 * @cdb: SCSI command to translate
1180 * Calculate LBA and transfer length for 16-byte commands.
1184 * @plen: the transfer length
1186 static void scsi_16_lba_len(const u8 *cdb, u64 *plba, u32 *plen)
1191 VPRINTK("sixteen-byte command\n");
1193 lba |= ((u64)cdb[2]) << 56;
1194 lba |= ((u64)cdb[3]) << 48;
1195 lba |= ((u64)cdb[4]) << 40;
1196 lba |= ((u64)cdb[5]) << 32;
1197 lba |= ((u64)cdb[6]) << 24;
1198 lba |= ((u64)cdb[7]) << 16;
1199 lba |= ((u64)cdb[8]) << 8;
1200 lba |= ((u64)cdb[9]);
1202 len |= ((u32)cdb[10]) << 24;
1203 len |= ((u32)cdb[11]) << 16;
1204 len |= ((u32)cdb[12]) << 8;
1205 len |= ((u32)cdb[13]);
1212 * ata_scsi_verify_xlat - Translate SCSI VERIFY command into an ATA one
1213 * @qc: Storage for translated ATA taskfile
1215 * Converts SCSI VERIFY command to an ATA READ VERIFY command.
1218 * spin_lock_irqsave(host lock)
1221 * Zero on success, non-zero on error.
1223 static unsigned int ata_scsi_verify_xlat(struct ata_queued_cmd *qc)
1225 struct scsi_cmnd *scmd = qc->scsicmd;
1226 struct ata_taskfile *tf = &qc->tf;
1227 struct ata_device *dev = qc->dev;
1228 u64 dev_sectors = qc->dev->n_sectors;
1229 const u8 *cdb = scmd->cmnd;
1233 tf->flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
1234 tf->protocol = ATA_PROT_NODATA;
1236 if (cdb[0] == VERIFY) {
1237 if (scmd->cmd_len < 10)
1239 scsi_10_lba_len(cdb, &block, &n_block);
1240 } else if (cdb[0] == VERIFY_16) {
1241 if (scmd->cmd_len < 16)
1243 scsi_16_lba_len(cdb, &block, &n_block);
1249 if (block >= dev_sectors)
1251 if ((block + n_block) > dev_sectors)
1254 if (dev->flags & ATA_DFLAG_LBA) {
1255 tf->flags |= ATA_TFLAG_LBA;
1257 if (lba_28_ok(block, n_block)) {
1259 tf->command = ATA_CMD_VERIFY;
1260 tf->device |= (block >> 24) & 0xf;
1261 } else if (lba_48_ok(block, n_block)) {
1262 if (!(dev->flags & ATA_DFLAG_LBA48))
1266 tf->flags |= ATA_TFLAG_LBA48;
1267 tf->command = ATA_CMD_VERIFY_EXT;
1269 tf->hob_nsect = (n_block >> 8) & 0xff;
1271 tf->hob_lbah = (block >> 40) & 0xff;
1272 tf->hob_lbam = (block >> 32) & 0xff;
1273 tf->hob_lbal = (block >> 24) & 0xff;
1275 /* request too large even for LBA48 */
1278 tf->nsect = n_block & 0xff;
1280 tf->lbah = (block >> 16) & 0xff;
1281 tf->lbam = (block >> 8) & 0xff;
1282 tf->lbal = block & 0xff;
1284 tf->device |= ATA_LBA;
1287 u32 sect, head, cyl, track;
1289 if (!lba_28_ok(block, n_block))
1292 /* Convert LBA to CHS */
1293 track = (u32)block / dev->sectors;
1294 cyl = track / dev->heads;
1295 head = track % dev->heads;
1296 sect = (u32)block % dev->sectors + 1;
1298 DPRINTK("block %u track %u cyl %u head %u sect %u\n",
1299 (u32)block, track, cyl, head, sect);
1301 /* Check whether the converted CHS can fit.
1305 if ((cyl >> 16) || (head >> 4) || (sect >> 8) || (!sect))
1308 tf->command = ATA_CMD_VERIFY;
1309 tf->nsect = n_block & 0xff; /* Sector count 0 means 256 sectors */
1312 tf->lbah = cyl >> 8;
1319 ata_scsi_set_sense(scmd, ILLEGAL_REQUEST, 0x24, 0x0);
1320 /* "Invalid field in cbd" */
1324 ata_scsi_set_sense(scmd, ILLEGAL_REQUEST, 0x21, 0x0);
1325 /* "Logical Block Address out of range" */
1329 scmd->result = SAM_STAT_GOOD;
1334 * ata_scsi_rw_xlat - Translate SCSI r/w command into an ATA one
1335 * @qc: Storage for translated ATA taskfile
1337 * Converts any of six SCSI read/write commands into the
1338 * ATA counterpart, including starting sector (LBA),
1339 * sector count, and taking into account the device's LBA48
1342 * Commands %READ_6, %READ_10, %READ_16, %WRITE_6, %WRITE_10, and
1343 * %WRITE_16 are currently supported.
1346 * spin_lock_irqsave(host lock)
1349 * Zero on success, non-zero on error.
1351 static unsigned int ata_scsi_rw_xlat(struct ata_queued_cmd *qc)
1353 struct scsi_cmnd *scmd = qc->scsicmd;
1354 const u8 *cdb = scmd->cmnd;
1355 unsigned int tf_flags = 0;
1360 if (cdb[0] == WRITE_10 || cdb[0] == WRITE_6 || cdb[0] == WRITE_16)
1361 tf_flags |= ATA_TFLAG_WRITE;
1363 /* Calculate the SCSI LBA, transfer length and FUA. */
1367 if (unlikely(scmd->cmd_len < 10))
1369 scsi_10_lba_len(cdb, &block, &n_block);
1370 if (unlikely(cdb[1] & (1 << 3)))
1371 tf_flags |= ATA_TFLAG_FUA;
1375 if (unlikely(scmd->cmd_len < 6))
1377 scsi_6_lba_len(cdb, &block, &n_block);
1379 /* for 6-byte r/w commands, transfer length 0
1380 * means 256 blocks of data, not 0 block.
1387 if (unlikely(scmd->cmd_len < 16))
1389 scsi_16_lba_len(cdb, &block, &n_block);
1390 if (unlikely(cdb[1] & (1 << 3)))
1391 tf_flags |= ATA_TFLAG_FUA;
1394 DPRINTK("no-byte command\n");
1398 /* Check and compose ATA command */
1400 /* For 10-byte and 16-byte SCSI R/W commands, transfer
1401 * length 0 means transfer 0 block of data.
1402 * However, for ATA R/W commands, sector count 0 means
1403 * 256 or 65536 sectors, not 0 sectors as in SCSI.
1405 * WARNING: one or two older ATA drives treat 0 as 0...
1409 qc->flags |= ATA_QCFLAG_IO;
1410 qc->nbytes = n_block * ATA_SECT_SIZE;
1412 rc = ata_build_rw_tf(&qc->tf, qc->dev, block, n_block, tf_flags,
1414 if (likely(rc == 0))
1419 /* treat all other errors as -EINVAL, fall through */
1421 ata_scsi_set_sense(scmd, ILLEGAL_REQUEST, 0x24, 0x0);
1422 /* "Invalid field in cbd" */
1426 ata_scsi_set_sense(scmd, ILLEGAL_REQUEST, 0x21, 0x0);
1427 /* "Logical Block Address out of range" */
1431 scmd->result = SAM_STAT_GOOD;
1435 static void ata_scsi_qc_complete(struct ata_queued_cmd *qc)
1437 struct ata_port *ap = qc->ap;
1438 struct scsi_cmnd *cmd = qc->scsicmd;
1439 u8 *cdb = cmd->cmnd;
1440 int need_sense = (qc->err_mask != 0);
1442 /* For ATA pass thru (SAT) commands, generate a sense block if
1443 * user mandated it or if there's an error. Note that if we
1444 * generate because the user forced us to, a check condition
1445 * is generated and the ATA register values are returned
1446 * whether the command completed successfully or not. If there
1447 * was no error, SK, ASC and ASCQ will all be zero.
1449 if (((cdb[0] == ATA_16) || (cdb[0] == ATA_12)) &&
1450 ((cdb[2] & 0x20) || need_sense)) {
1451 ata_gen_passthru_sense(qc);
1454 cmd->result = SAM_STAT_GOOD;
1456 /* TODO: decide which descriptor format to use
1457 * for 48b LBA devices and call that here
1458 * instead of the fixed desc, which is only
1459 * good for smaller LBA (and maybe CHS?)
1462 ata_gen_ata_sense(qc);
1466 /* XXX: track spindown state for spindown skipping and warning */
1467 if (unlikely(qc->tf.command == ATA_CMD_STANDBY ||
1468 qc->tf.command == ATA_CMD_STANDBYNOW1))
1469 qc->dev->flags |= ATA_DFLAG_SPUNDOWN;
1470 else if (likely(system_state != SYSTEM_HALT &&
1471 system_state != SYSTEM_POWER_OFF))
1472 qc->dev->flags &= ~ATA_DFLAG_SPUNDOWN;
1474 if (need_sense && !ap->ops->error_handler)
1475 ata_dump_status(ap->print_id, &qc->result_tf);
1483 * ata_scsi_translate - Translate then issue SCSI command to ATA device
1484 * @dev: ATA device to which the command is addressed
1485 * @cmd: SCSI command to execute
1486 * @done: SCSI command completion function
1487 * @xlat_func: Actor which translates @cmd to an ATA taskfile
1489 * Our ->queuecommand() function has decided that the SCSI
1490 * command issued can be directly translated into an ATA
1491 * command, rather than handled internally.
1493 * This function sets up an ata_queued_cmd structure for the
1494 * SCSI command, and sends that ata_queued_cmd to the hardware.
1496 * The xlat_func argument (actor) returns 0 if ready to execute
1497 * ATA command, else 1 to finish translation. If 1 is returned
1498 * then cmd->result (and possibly cmd->sense_buffer) are assumed
1499 * to be set reflecting an error condition or clean (early)
1503 * spin_lock_irqsave(host lock)
1506 * 0 on success, SCSI_ML_QUEUE_DEVICE_BUSY if the command
1507 * needs to be deferred.
1509 static int ata_scsi_translate(struct ata_device *dev, struct scsi_cmnd *cmd,
1510 void (*done)(struct scsi_cmnd *),
1511 ata_xlat_func_t xlat_func)
1513 struct ata_port *ap = dev->link->ap;
1514 struct ata_queued_cmd *qc;
1519 qc = ata_scsi_qc_new(dev, cmd, done);
1523 /* data is present; dma-map it */
1524 if (cmd->sc_data_direction == DMA_FROM_DEVICE ||
1525 cmd->sc_data_direction == DMA_TO_DEVICE) {
1526 if (unlikely(scsi_bufflen(cmd) < 1)) {
1527 ata_dev_printk(dev, KERN_WARNING,
1528 "WARNING: zero len r/w req\n");
1532 ata_sg_init(qc, scsi_sglist(cmd), scsi_sg_count(cmd));
1534 qc->dma_dir = cmd->sc_data_direction;
1537 qc->complete_fn = ata_scsi_qc_complete;
1542 if (ap->ops->qc_defer) {
1543 if ((rc = ap->ops->qc_defer(qc)))
1547 /* select device, send command to hardware */
1556 DPRINTK("EXIT - early finish (good or error)\n");
1561 cmd->result = (DID_ERROR << 16);
1564 DPRINTK("EXIT - internal\n");
1569 DPRINTK("EXIT - defer\n");
1570 if (rc == ATA_DEFER_LINK)
1571 return SCSI_MLQUEUE_DEVICE_BUSY;
1573 return SCSI_MLQUEUE_HOST_BUSY;
1577 * ata_scsi_rbuf_get - Map response buffer.
1578 * @cmd: SCSI command containing buffer to be mapped.
1579 * @buf_out: Pointer to mapped area.
1581 * Maps buffer contained within SCSI command @cmd.
1584 * spin_lock_irqsave(host lock)
1587 * Length of response buffer.
1590 static unsigned int ata_scsi_rbuf_get(struct scsi_cmnd *cmd, u8 **buf_out)
1593 unsigned int buflen;
1595 struct scatterlist *sg = scsi_sglist(cmd);
1598 buf = kmap_atomic(sg_page(sg), KM_IRQ0) + sg->offset;
1599 buflen = sg->length;
1610 * ata_scsi_rbuf_put - Unmap response buffer.
1611 * @cmd: SCSI command containing buffer to be unmapped.
1612 * @buf: buffer to unmap
1614 * Unmaps response buffer contained within @cmd.
1617 * spin_lock_irqsave(host lock)
1620 static inline void ata_scsi_rbuf_put(struct scsi_cmnd *cmd, u8 *buf)
1622 struct scatterlist *sg = scsi_sglist(cmd);
1624 kunmap_atomic(buf - sg->offset, KM_IRQ0);
1628 * ata_scsi_rbuf_fill - wrapper for SCSI command simulators
1629 * @args: device IDENTIFY data / SCSI command of interest.
1630 * @actor: Callback hook for desired SCSI command simulator
1632 * Takes care of the hard work of simulating a SCSI command...
1633 * Mapping the response buffer, calling the command's handler,
1634 * and handling the handler's return value. This return value
1635 * indicates whether the handler wishes the SCSI command to be
1636 * completed successfully (0), or not (in which case cmd->result
1637 * and sense buffer are assumed to be set).
1640 * spin_lock_irqsave(host lock)
1643 void ata_scsi_rbuf_fill(struct ata_scsi_args *args,
1644 unsigned int (*actor) (struct ata_scsi_args *args,
1645 u8 *rbuf, unsigned int buflen))
1648 unsigned int buflen, rc;
1649 struct scsi_cmnd *cmd = args->cmd;
1651 buflen = ata_scsi_rbuf_get(cmd, &rbuf);
1652 memset(rbuf, 0, buflen);
1653 rc = actor(args, rbuf, buflen);
1654 ata_scsi_rbuf_put(cmd, rbuf);
1657 cmd->result = SAM_STAT_GOOD;
1662 * ATA_SCSI_RBUF_SET - helper to set values in SCSI response buffer
1663 * @idx: byte index into SCSI response buffer
1664 * @val: value to set
1666 * To be used by SCSI command simulator functions. This macros
1667 * expects two local variables, u8 *rbuf and unsigned int buflen,
1673 #define ATA_SCSI_RBUF_SET(idx, val) do { \
1674 if ((idx) < buflen) rbuf[(idx)] = (u8)(val); \
1678 * ata_scsiop_inq_std - Simulate INQUIRY command
1679 * @args: device IDENTIFY data / SCSI command of interest.
1680 * @rbuf: Response buffer, to which simulated SCSI cmd output is sent.
1681 * @buflen: Response buffer length.
1683 * Returns standard device identification data associated
1684 * with non-VPD INQUIRY command output.
1687 * spin_lock_irqsave(host lock)
1690 unsigned int ata_scsiop_inq_std(struct ata_scsi_args *args, u8 *rbuf,
1691 unsigned int buflen)
1696 0x5, /* claim SPC-3 version compatibility */
1701 /* set scsi removeable (RMB) bit per ata bit */
1702 if (ata_id_removeable(args->id))
1707 memcpy(rbuf, hdr, sizeof(hdr));
1710 memcpy(&rbuf[8], "ATA ", 8);
1711 ata_id_string(args->id, &rbuf[16], ATA_ID_PROD, 16);
1712 ata_id_string(args->id, &rbuf[32], ATA_ID_FW_REV, 4);
1713 if (rbuf[32] == 0 || rbuf[32] == ' ')
1714 memcpy(&rbuf[32], "n/a ", 4);
1718 const u8 versions[] = {
1719 0x60, /* SAM-3 (no version claimed) */
1722 0x20, /* SBC-2 (no version claimed) */
1725 0x60 /* SPC-3 (no version claimed) */
1728 memcpy(rbuf + 59, versions, sizeof(versions));
1735 * ata_scsiop_inq_00 - Simulate INQUIRY VPD page 0, list of pages
1736 * @args: device IDENTIFY data / SCSI command of interest.
1737 * @rbuf: Response buffer, to which simulated SCSI cmd output is sent.
1738 * @buflen: Response buffer length.
1740 * Returns list of inquiry VPD pages available.
1743 * spin_lock_irqsave(host lock)
1746 unsigned int ata_scsiop_inq_00(struct ata_scsi_args *args, u8 *rbuf,
1747 unsigned int buflen)
1749 const u8 pages[] = {
1750 0x00, /* page 0x00, this page */
1751 0x80, /* page 0x80, unit serial no page */
1752 0x83 /* page 0x83, device ident page */
1754 rbuf[3] = sizeof(pages); /* number of supported VPD pages */
1757 memcpy(rbuf + 4, pages, sizeof(pages));
1763 * ata_scsiop_inq_80 - Simulate INQUIRY VPD page 80, device serial number
1764 * @args: device IDENTIFY data / SCSI command of interest.
1765 * @rbuf: Response buffer, to which simulated SCSI cmd output is sent.
1766 * @buflen: Response buffer length.
1768 * Returns ATA device serial number.
1771 * spin_lock_irqsave(host lock)
1774 unsigned int ata_scsiop_inq_80(struct ata_scsi_args *args, u8 *rbuf,
1775 unsigned int buflen)
1779 0x80, /* this page code */
1781 ATA_ID_SERNO_LEN, /* page len */
1783 memcpy(rbuf, hdr, sizeof(hdr));
1785 if (buflen > (ATA_ID_SERNO_LEN + 4 - 1))
1786 ata_id_string(args->id, (unsigned char *) &rbuf[4],
1787 ATA_ID_SERNO, ATA_ID_SERNO_LEN);
1793 * ata_scsiop_inq_83 - Simulate INQUIRY VPD page 83, device identity
1794 * @args: device IDENTIFY data / SCSI command of interest.
1795 * @rbuf: Response buffer, to which simulated SCSI cmd output is sent.
1796 * @buflen: Response buffer length.
1798 * Yields two logical unit device identification designators:
1799 * - vendor specific ASCII containing the ATA serial number
1800 * - SAT defined "t10 vendor id based" containing ASCII vendor
1801 * name ("ATA "), model and serial numbers.
1804 * spin_lock_irqsave(host lock)
1807 unsigned int ata_scsiop_inq_83(struct ata_scsi_args *args, u8 *rbuf,
1808 unsigned int buflen)
1811 const int sat_model_serial_desc_len = 68;
1813 rbuf[1] = 0x83; /* this page code */
1816 if (buflen > (ATA_ID_SERNO_LEN + num + 3)) {
1817 /* piv=0, assoc=lu, code_set=ACSII, designator=vendor */
1819 rbuf[num + 3] = ATA_ID_SERNO_LEN;
1821 ata_id_string(args->id, (unsigned char *) rbuf + num,
1822 ATA_ID_SERNO, ATA_ID_SERNO_LEN);
1823 num += ATA_ID_SERNO_LEN;
1825 if (buflen > (sat_model_serial_desc_len + num + 3)) {
1826 /* SAT defined lu model and serial numbers descriptor */
1827 /* piv=0, assoc=lu, code_set=ACSII, designator=t10 vendor id */
1830 rbuf[num + 3] = sat_model_serial_desc_len;
1832 memcpy(rbuf + num, "ATA ", 8);
1834 ata_id_string(args->id, (unsigned char *) rbuf + num,
1835 ATA_ID_PROD, ATA_ID_PROD_LEN);
1836 num += ATA_ID_PROD_LEN;
1837 ata_id_string(args->id, (unsigned char *) rbuf + num,
1838 ATA_ID_SERNO, ATA_ID_SERNO_LEN);
1839 num += ATA_ID_SERNO_LEN;
1841 rbuf[3] = num - 4; /* page len (assume less than 256 bytes) */
1846 * ata_scsiop_inq_89 - Simulate INQUIRY VPD page 89, ATA info
1847 * @args: device IDENTIFY data / SCSI command of interest.
1848 * @rbuf: Response buffer, to which simulated SCSI cmd output is sent.
1849 * @buflen: Response buffer length.
1851 * Yields SAT-specified ATA VPD page.
1854 * spin_lock_irqsave(host lock)
1857 unsigned int ata_scsiop_inq_89(struct ata_scsi_args *args, u8 *rbuf,
1858 unsigned int buflen)
1861 struct ata_taskfile tf;
1867 memset(&pbuf, 0, sizeof(pbuf));
1868 memset(&tf, 0, sizeof(tf));
1870 pbuf[1] = 0x89; /* our page code */
1871 pbuf[2] = (0x238 >> 8); /* page size fixed at 238h */
1872 pbuf[3] = (0x238 & 0xff);
1874 memcpy(&pbuf[8], "linux ", 8);
1875 memcpy(&pbuf[16], "libata ", 16);
1876 memcpy(&pbuf[32], DRV_VERSION, 4);
1877 ata_id_string(args->id, &pbuf[32], ATA_ID_FW_REV, 4);
1879 /* we don't store the ATA device signature, so we fake it */
1881 tf.command = ATA_DRDY; /* really, this is Status reg */
1885 ata_tf_to_fis(&tf, 0, 1, &pbuf[36]); /* TODO: PMP? */
1886 pbuf[36] = 0x34; /* force D2H Reg FIS (34h) */
1888 pbuf[56] = ATA_CMD_ID_ATA;
1890 i = min(buflen, 60U);
1891 memcpy(rbuf, &pbuf[0], i);
1897 memcpy(&rbuf[60], &args->id[0], min(buflen, 512U));
1902 * ata_scsiop_noop - Command handler that simply returns success.
1903 * @args: device IDENTIFY data / SCSI command of interest.
1904 * @rbuf: Response buffer, to which simulated SCSI cmd output is sent.
1905 * @buflen: Response buffer length.
1907 * No operation. Simply returns success to caller, to indicate
1908 * that the caller should successfully complete this SCSI command.
1911 * spin_lock_irqsave(host lock)
1914 unsigned int ata_scsiop_noop(struct ata_scsi_args *args, u8 *rbuf,
1915 unsigned int buflen)
1922 * ata_msense_push - Push data onto MODE SENSE data output buffer
1923 * @ptr_io: (input/output) Location to store more output data
1924 * @last: End of output data buffer
1925 * @buf: Pointer to BLOB being added to output buffer
1926 * @buflen: Length of BLOB
1928 * Store MODE SENSE data on an output buffer.
1934 static void ata_msense_push(u8 **ptr_io, const u8 *last,
1935 const u8 *buf, unsigned int buflen)
1939 if ((ptr + buflen - 1) > last)
1942 memcpy(ptr, buf, buflen);
1950 * ata_msense_caching - Simulate MODE SENSE caching info page
1951 * @id: device IDENTIFY data
1952 * @ptr_io: (input/output) Location to store more output data
1953 * @last: End of output data buffer
1955 * Generate a caching info page, which conditionally indicates
1956 * write caching to the SCSI layer, depending on device
1963 static unsigned int ata_msense_caching(u16 *id, u8 **ptr_io,
1966 u8 page[CACHE_MPAGE_LEN];
1968 memcpy(page, def_cache_mpage, sizeof(page));
1969 if (ata_id_wcache_enabled(id))
1970 page[2] |= (1 << 2); /* write cache enable */
1971 if (!ata_id_rahead_enabled(id))
1972 page[12] |= (1 << 5); /* disable read ahead */
1974 ata_msense_push(ptr_io, last, page, sizeof(page));
1975 return sizeof(page);
1979 * ata_msense_ctl_mode - Simulate MODE SENSE control mode page
1980 * @dev: Device associated with this MODE SENSE command
1981 * @ptr_io: (input/output) Location to store more output data
1982 * @last: End of output data buffer
1984 * Generate a generic MODE SENSE control mode page.
1990 static unsigned int ata_msense_ctl_mode(u8 **ptr_io, const u8 *last)
1992 ata_msense_push(ptr_io, last, def_control_mpage,
1993 sizeof(def_control_mpage));
1994 return sizeof(def_control_mpage);
1998 * ata_msense_rw_recovery - Simulate MODE SENSE r/w error recovery page
1999 * @dev: Device associated with this MODE SENSE command
2000 * @ptr_io: (input/output) Location to store more output data
2001 * @last: End of output data buffer
2003 * Generate a generic MODE SENSE r/w error recovery page.
2009 static unsigned int ata_msense_rw_recovery(u8 **ptr_io, const u8 *last)
2012 ata_msense_push(ptr_io, last, def_rw_recovery_mpage,
2013 sizeof(def_rw_recovery_mpage));
2014 return sizeof(def_rw_recovery_mpage);
2018 * We can turn this into a real blacklist if it's needed, for now just
2019 * blacklist any Maxtor BANC1G10 revision firmware
2021 static int ata_dev_supports_fua(u16 *id)
2023 unsigned char model[ATA_ID_PROD_LEN + 1], fw[ATA_ID_FW_REV_LEN + 1];
2027 if (!ata_id_has_fua(id))
2030 ata_id_c_string(id, model, ATA_ID_PROD, sizeof(model));
2031 ata_id_c_string(id, fw, ATA_ID_FW_REV, sizeof(fw));
2033 if (strcmp(model, "Maxtor"))
2035 if (strcmp(fw, "BANC1G10"))
2038 return 0; /* blacklisted */
2042 * ata_scsiop_mode_sense - Simulate MODE SENSE 6, 10 commands
2043 * @args: device IDENTIFY data / SCSI command of interest.
2044 * @rbuf: Response buffer, to which simulated SCSI cmd output is sent.
2045 * @buflen: Response buffer length.
2047 * Simulate MODE SENSE commands. Assume this is invoked for direct
2048 * access devices (e.g. disks) only. There should be no block
2049 * descriptor for other device types.
2052 * spin_lock_irqsave(host lock)
2055 unsigned int ata_scsiop_mode_sense(struct ata_scsi_args *args, u8 *rbuf,
2056 unsigned int buflen)
2058 struct ata_device *dev = args->dev;
2059 u8 *scsicmd = args->cmd->cmnd, *p, *last;
2060 const u8 sat_blk_desc[] = {
2061 0, 0, 0, 0, /* number of blocks: sat unspecified */
2063 0, 0x2, 0x0 /* block length: 512 bytes */
2066 unsigned int ebd, page_control, six_byte, output_len, alloc_len, minlen;
2071 six_byte = (scsicmd[0] == MODE_SENSE);
2072 ebd = !(scsicmd[1] & 0x8); /* dbd bit inverted == edb */
2074 * LLBA bit in msense(10) ignored (compliant)
2077 page_control = scsicmd[2] >> 6;
2078 switch (page_control) {
2079 case 0: /* current */
2080 break; /* supported */
2082 goto saving_not_supp;
2083 case 1: /* changeable */
2084 case 2: /* defaults */
2090 output_len = 4 + (ebd ? 8 : 0);
2091 alloc_len = scsicmd[4];
2093 output_len = 8 + (ebd ? 8 : 0);
2094 alloc_len = (scsicmd[7] << 8) + scsicmd[8];
2096 minlen = (alloc_len < buflen) ? alloc_len : buflen;
2098 p = rbuf + output_len;
2099 last = rbuf + minlen - 1;
2101 pg = scsicmd[2] & 0x3f;
2104 * No mode subpages supported (yet) but asking for _all_
2105 * subpages may be valid
2107 if (spg && (spg != ALL_SUB_MPAGES))
2111 case RW_RECOVERY_MPAGE:
2112 output_len += ata_msense_rw_recovery(&p, last);
2116 output_len += ata_msense_caching(args->id, &p, last);
2119 case CONTROL_MPAGE: {
2120 output_len += ata_msense_ctl_mode(&p, last);
2125 output_len += ata_msense_rw_recovery(&p, last);
2126 output_len += ata_msense_caching(args->id, &p, last);
2127 output_len += ata_msense_ctl_mode(&p, last);
2130 default: /* invalid page code */
2138 if (ata_dev_supports_fua(args->id) && (dev->flags & ATA_DFLAG_LBA48) &&
2139 (!(dev->flags & ATA_DFLAG_PIO) || dev->multi_count))
2144 rbuf[0] = output_len;
2149 rbuf[3] = sizeof(sat_blk_desc);
2151 memcpy(rbuf + 4, sat_blk_desc,
2152 sizeof(sat_blk_desc));
2156 rbuf[0] = output_len >> 8;
2158 rbuf[1] = output_len;
2163 rbuf[7] = sizeof(sat_blk_desc);
2165 memcpy(rbuf + 8, sat_blk_desc,
2166 sizeof(sat_blk_desc));
2172 ata_scsi_set_sense(args->cmd, ILLEGAL_REQUEST, 0x24, 0x0);
2173 /* "Invalid field in cbd" */
2177 ata_scsi_set_sense(args->cmd, ILLEGAL_REQUEST, 0x39, 0x0);
2178 /* "Saving parameters not supported" */
2183 * ata_scsiop_read_cap - Simulate READ CAPACITY[ 16] commands
2184 * @args: device IDENTIFY data / SCSI command of interest.
2185 * @rbuf: Response buffer, to which simulated SCSI cmd output is sent.
2186 * @buflen: Response buffer length.
2188 * Simulate READ CAPACITY commands.
2193 unsigned int ata_scsiop_read_cap(struct ata_scsi_args *args, u8 *rbuf,
2194 unsigned int buflen)
2196 u64 last_lba = args->dev->n_sectors - 1; /* LBA of the last block */
2200 if (args->cmd->cmnd[0] == READ_CAPACITY) {
2201 if (last_lba >= 0xffffffffULL)
2202 last_lba = 0xffffffff;
2204 /* sector count, 32-bit */
2205 ATA_SCSI_RBUF_SET(0, last_lba >> (8 * 3));
2206 ATA_SCSI_RBUF_SET(1, last_lba >> (8 * 2));
2207 ATA_SCSI_RBUF_SET(2, last_lba >> (8 * 1));
2208 ATA_SCSI_RBUF_SET(3, last_lba);
2211 ATA_SCSI_RBUF_SET(6, ATA_SECT_SIZE >> 8);
2212 ATA_SCSI_RBUF_SET(7, ATA_SECT_SIZE);
2214 /* sector count, 64-bit */
2215 ATA_SCSI_RBUF_SET(0, last_lba >> (8 * 7));
2216 ATA_SCSI_RBUF_SET(1, last_lba >> (8 * 6));
2217 ATA_SCSI_RBUF_SET(2, last_lba >> (8 * 5));
2218 ATA_SCSI_RBUF_SET(3, last_lba >> (8 * 4));
2219 ATA_SCSI_RBUF_SET(4, last_lba >> (8 * 3));
2220 ATA_SCSI_RBUF_SET(5, last_lba >> (8 * 2));
2221 ATA_SCSI_RBUF_SET(6, last_lba >> (8 * 1));
2222 ATA_SCSI_RBUF_SET(7, last_lba);
2225 ATA_SCSI_RBUF_SET(10, ATA_SECT_SIZE >> 8);
2226 ATA_SCSI_RBUF_SET(11, ATA_SECT_SIZE);
2233 * ata_scsiop_report_luns - Simulate REPORT LUNS command
2234 * @args: device IDENTIFY data / SCSI command of interest.
2235 * @rbuf: Response buffer, to which simulated SCSI cmd output is sent.
2236 * @buflen: Response buffer length.
2238 * Simulate REPORT LUNS command.
2241 * spin_lock_irqsave(host lock)
2244 unsigned int ata_scsiop_report_luns(struct ata_scsi_args *args, u8 *rbuf,
2245 unsigned int buflen)
2248 rbuf[3] = 8; /* just one lun, LUN 0, size 8 bytes */
2254 * ata_scsi_set_sense - Set SCSI sense data and status
2255 * @cmd: SCSI request to be handled
2256 * @sk: SCSI-defined sense key
2257 * @asc: SCSI-defined additional sense code
2258 * @ascq: SCSI-defined additional sense code qualifier
2260 * Helper function that builds a valid fixed format, current
2261 * response code and the given sense key (sk), additional sense
2262 * code (asc) and additional sense code qualifier (ascq) with
2263 * a SCSI command status of %SAM_STAT_CHECK_CONDITION and
2264 * DRIVER_SENSE set in the upper bits of scsi_cmnd::result .
2270 void ata_scsi_set_sense(struct scsi_cmnd *cmd, u8 sk, u8 asc, u8 ascq)
2272 cmd->result = (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION;
2274 cmd->sense_buffer[0] = 0x70; /* fixed format, current */
2275 cmd->sense_buffer[2] = sk;
2276 cmd->sense_buffer[7] = 18 - 8; /* additional sense length */
2277 cmd->sense_buffer[12] = asc;
2278 cmd->sense_buffer[13] = ascq;
2282 * ata_scsi_badcmd - End a SCSI request with an error
2283 * @cmd: SCSI request to be handled
2284 * @done: SCSI command completion function
2285 * @asc: SCSI-defined additional sense code
2286 * @ascq: SCSI-defined additional sense code qualifier
2288 * Helper function that completes a SCSI command with
2289 * %SAM_STAT_CHECK_CONDITION, with a sense key %ILLEGAL_REQUEST
2290 * and the specified additional sense codes.
2293 * spin_lock_irqsave(host lock)
2296 void ata_scsi_badcmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *), u8 asc, u8 ascq)
2299 ata_scsi_set_sense(cmd, ILLEGAL_REQUEST, asc, ascq);
2304 static void atapi_sense_complete(struct ata_queued_cmd *qc)
2306 if (qc->err_mask && ((qc->err_mask & AC_ERR_DEV) == 0)) {
2307 /* FIXME: not quite right; we don't want the
2308 * translation of taskfile registers into
2309 * a sense descriptors, since that's only
2310 * correct for ATA, not ATAPI
2312 ata_gen_passthru_sense(qc);
2315 qc->scsidone(qc->scsicmd);
2319 /* is it pointless to prefer PIO for "safety reasons"? */
2320 static inline int ata_pio_use_silly(struct ata_port *ap)
2322 return (ap->flags & ATA_FLAG_PIO_DMA);
2325 static void atapi_request_sense(struct ata_queued_cmd *qc)
2327 struct ata_port *ap = qc->ap;
2328 struct scsi_cmnd *cmd = qc->scsicmd;
2330 DPRINTK("ATAPI request sense\n");
2332 /* FIXME: is this needed? */
2333 memset(cmd->sense_buffer, 0, sizeof(cmd->sense_buffer));
2335 ap->ops->tf_read(ap, &qc->tf);
2337 /* fill these in, for the case where they are -not- overwritten */
2338 cmd->sense_buffer[0] = 0x70;
2339 cmd->sense_buffer[2] = qc->tf.feature >> 4;
2343 ata_sg_init_one(qc, cmd->sense_buffer, sizeof(cmd->sense_buffer));
2344 qc->dma_dir = DMA_FROM_DEVICE;
2346 memset(&qc->cdb, 0, qc->dev->cdb_len);
2347 qc->cdb[0] = REQUEST_SENSE;
2348 qc->cdb[4] = SCSI_SENSE_BUFFERSIZE;
2350 qc->tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
2351 qc->tf.command = ATA_CMD_PACKET;
2353 if (ata_pio_use_silly(ap)) {
2354 qc->tf.protocol = ATA_PROT_ATAPI_DMA;
2355 qc->tf.feature |= ATAPI_PKT_DMA;
2357 qc->tf.protocol = ATA_PROT_ATAPI;
2358 qc->tf.lbam = SCSI_SENSE_BUFFERSIZE;
2361 qc->nbytes = SCSI_SENSE_BUFFERSIZE;
2363 qc->complete_fn = atapi_sense_complete;
2370 static void atapi_qc_complete(struct ata_queued_cmd *qc)
2372 struct scsi_cmnd *cmd = qc->scsicmd;
2373 unsigned int err_mask = qc->err_mask;
2375 VPRINTK("ENTER, err_mask 0x%X\n", err_mask);
2377 /* handle completion from new EH */
2378 if (unlikely(qc->ap->ops->error_handler &&
2379 (err_mask || qc->flags & ATA_QCFLAG_SENSE_VALID))) {
2381 if (!(qc->flags & ATA_QCFLAG_SENSE_VALID)) {
2382 /* FIXME: not quite right; we don't want the
2383 * translation of taskfile registers into a
2384 * sense descriptors, since that's only
2385 * correct for ATA, not ATAPI
2387 ata_gen_passthru_sense(qc);
2390 /* SCSI EH automatically locks door if sdev->locked is
2391 * set. Sometimes door lock request continues to
2392 * fail, for example, when no media is present. This
2393 * creates a loop - SCSI EH issues door lock which
2394 * fails and gets invoked again to acquire sense data
2395 * for the failed command.
2397 * If door lock fails, always clear sdev->locked to
2398 * avoid this infinite loop.
2400 if (qc->cdb[0] == ALLOW_MEDIUM_REMOVAL)
2401 qc->dev->sdev->locked = 0;
2403 qc->scsicmd->result = SAM_STAT_CHECK_CONDITION;
2409 /* successful completion or old EH failure path */
2410 if (unlikely(err_mask & AC_ERR_DEV)) {
2411 cmd->result = SAM_STAT_CHECK_CONDITION;
2412 atapi_request_sense(qc);
2414 } else if (unlikely(err_mask)) {
2415 /* FIXME: not quite right; we don't want the
2416 * translation of taskfile registers into
2417 * a sense descriptors, since that's only
2418 * correct for ATA, not ATAPI
2420 ata_gen_passthru_sense(qc);
2422 u8 *scsicmd = cmd->cmnd;
2424 if ((scsicmd[0] == INQUIRY) && ((scsicmd[1] & 0x03) == 0)) {
2426 unsigned int buflen;
2428 buflen = ata_scsi_rbuf_get(cmd, &buf);
2430 /* ATAPI devices typically report zero for their SCSI version,
2431 * and sometimes deviate from the spec WRT response data
2432 * format. If SCSI version is reported as zero like normal,
2433 * then we make the following fixups: 1) Fake MMC-5 version,
2434 * to indicate to the Linux scsi midlayer this is a modern
2435 * device. 2) Ensure response data format / ATAPI information
2436 * are always correct.
2443 ata_scsi_rbuf_put(cmd, buf);
2446 cmd->result = SAM_STAT_GOOD;
2453 * atapi_xlat - Initialize PACKET taskfile
2454 * @qc: command structure to be initialized
2457 * spin_lock_irqsave(host lock)
2460 * Zero on success, non-zero on failure.
2462 static unsigned int atapi_xlat(struct ata_queued_cmd *qc)
2464 struct scsi_cmnd *scmd = qc->scsicmd;
2465 struct ata_device *dev = qc->dev;
2466 int using_pio = (dev->flags & ATA_DFLAG_PIO);
2467 int nodata = (scmd->sc_data_direction == DMA_NONE);
2468 unsigned int nbytes;
2470 memset(qc->cdb, 0, dev->cdb_len);
2471 memcpy(qc->cdb, scmd->cmnd, scmd->cmd_len);
2473 qc->complete_fn = atapi_qc_complete;
2475 qc->tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
2476 if (scmd->sc_data_direction == DMA_TO_DEVICE) {
2477 qc->tf.flags |= ATA_TFLAG_WRITE;
2478 DPRINTK("direction: write\n");
2481 qc->tf.command = ATA_CMD_PACKET;
2482 qc->nbytes = scsi_bufflen(scmd);
2484 /* check whether ATAPI DMA is safe */
2485 if (!using_pio && ata_check_atapi_dma(qc))
2488 /* Some controller variants snoop this value for Packet transfers
2489 to do state machine and FIFO management. Thus we want to set it
2490 properly, and for DMA where it is effectively meaningless */
2491 nbytes = min(qc->nbytes, (unsigned int)63 * 1024);
2493 qc->tf.lbam = (nbytes & 0xFF);
2494 qc->tf.lbah = (nbytes >> 8);
2496 if (using_pio || nodata) {
2497 /* no data, or PIO data xfer */
2499 qc->tf.protocol = ATA_PROT_ATAPI_NODATA;
2501 qc->tf.protocol = ATA_PROT_ATAPI;
2504 qc->tf.protocol = ATA_PROT_ATAPI_DMA;
2505 qc->tf.feature |= ATAPI_PKT_DMA;
2507 if (atapi_dmadir && (scmd->sc_data_direction != DMA_TO_DEVICE))
2508 /* some SATA bridges need us to indicate data xfer direction */
2509 qc->tf.feature |= ATAPI_DMADIR;
2513 /* FIXME: We need to translate 0x05 READ_BLOCK_LIMITS to a MODE_SENSE
2514 as ATAPI tape drives don't get this right otherwise */
2518 static struct ata_device *ata_find_dev(struct ata_port *ap, int devno)
2520 if (ap->nr_pmp_links == 0) {
2521 if (likely(devno < ata_link_max_devices(&ap->link)))
2522 return &ap->link.device[devno];
2524 if (likely(devno < ap->nr_pmp_links))
2525 return &ap->pmp_link[devno].device[0];
2531 static struct ata_device *__ata_scsi_find_dev(struct ata_port *ap,
2532 const struct scsi_device *scsidev)
2536 /* skip commands not addressed to targets we simulate */
2537 if (ap->nr_pmp_links == 0) {
2538 if (unlikely(scsidev->channel || scsidev->lun))
2540 devno = scsidev->id;
2542 if (unlikely(scsidev->id || scsidev->lun))
2544 devno = scsidev->channel;
2547 return ata_find_dev(ap, devno);
2551 * ata_scsi_dev_enabled - determine if device is enabled
2554 * Determine if commands should be sent to the specified device.
2557 * spin_lock_irqsave(host lock)
2560 * 0 if commands are not allowed / 1 if commands are allowed
2563 static int ata_scsi_dev_enabled(struct ata_device *dev)
2565 if (unlikely(!ata_dev_enabled(dev)))
2568 if (!atapi_enabled || (dev->link->ap->flags & ATA_FLAG_NO_ATAPI)) {
2569 if (unlikely(dev->class == ATA_DEV_ATAPI)) {
2570 ata_dev_printk(dev, KERN_WARNING,
2571 "WARNING: ATAPI is %s, device ignored.\n",
2572 atapi_enabled ? "not supported with this driver" : "disabled");
2581 * ata_scsi_find_dev - lookup ata_device from scsi_cmnd
2582 * @ap: ATA port to which the device is attached
2583 * @scsidev: SCSI device from which we derive the ATA device
2585 * Given various information provided in struct scsi_cmnd,
2586 * map that onto an ATA bus, and using that mapping
2587 * determine which ata_device is associated with the
2588 * SCSI command to be sent.
2591 * spin_lock_irqsave(host lock)
2594 * Associated ATA device, or %NULL if not found.
2596 static struct ata_device *
2597 ata_scsi_find_dev(struct ata_port *ap, const struct scsi_device *scsidev)
2599 struct ata_device *dev = __ata_scsi_find_dev(ap, scsidev);
2601 if (unlikely(!dev || !ata_scsi_dev_enabled(dev)))
2608 * ata_scsi_map_proto - Map pass-thru protocol value to taskfile value.
2609 * @byte1: Byte 1 from pass-thru CDB.
2612 * ATA_PROT_UNKNOWN if mapping failed/unimplemented, protocol otherwise.
2615 ata_scsi_map_proto(u8 byte1)
2617 switch((byte1 & 0x1e) >> 1) {
2618 case 3: /* Non-data */
2619 return ATA_PROT_NODATA;
2622 case 10: /* UDMA Data-in */
2623 case 11: /* UDMA Data-Out */
2624 return ATA_PROT_DMA;
2626 case 4: /* PIO Data-in */
2627 case 5: /* PIO Data-out */
2628 return ATA_PROT_PIO;
2630 case 0: /* Hard Reset */
2632 case 8: /* Device Diagnostic */
2633 case 9: /* Device Reset */
2634 case 7: /* DMA Queued */
2635 case 12: /* FPDMA */
2636 case 15: /* Return Response Info */
2637 default: /* Reserved */
2641 return ATA_PROT_UNKNOWN;
2645 * ata_scsi_pass_thru - convert ATA pass-thru CDB to taskfile
2646 * @qc: command structure to be initialized
2648 * Handles either 12 or 16-byte versions of the CDB.
2651 * Zero on success, non-zero on failure.
2653 static unsigned int ata_scsi_pass_thru(struct ata_queued_cmd *qc)
2655 struct ata_taskfile *tf = &(qc->tf);
2656 struct scsi_cmnd *scmd = qc->scsicmd;
2657 struct ata_device *dev = qc->dev;
2658 const u8 *cdb = scmd->cmnd;
2660 if ((tf->protocol = ata_scsi_map_proto(cdb[1])) == ATA_PROT_UNKNOWN)
2663 /* We may not issue DMA commands if no DMA mode is set */
2664 if (tf->protocol == ATA_PROT_DMA && dev->dma_mode == 0)
2668 * 12 and 16 byte CDBs use different offsets to
2669 * provide the various register values.
2671 if (cdb[0] == ATA_16) {
2673 * 16-byte CDB - may contain extended commands.
2675 * If that is the case, copy the upper byte register values.
2677 if (cdb[1] & 0x01) {
2678 tf->hob_feature = cdb[3];
2679 tf->hob_nsect = cdb[5];
2680 tf->hob_lbal = cdb[7];
2681 tf->hob_lbam = cdb[9];
2682 tf->hob_lbah = cdb[11];
2683 tf->flags |= ATA_TFLAG_LBA48;
2685 tf->flags &= ~ATA_TFLAG_LBA48;
2688 * Always copy low byte, device and command registers.
2690 tf->feature = cdb[4];
2695 tf->device = cdb[13];
2696 tf->command = cdb[14];
2699 * 12-byte CDB - incapable of extended commands.
2701 tf->flags &= ~ATA_TFLAG_LBA48;
2703 tf->feature = cdb[3];
2708 tf->device = cdb[8];
2709 tf->command = cdb[9];
2712 /* enforce correct master/slave bit */
2713 tf->device = dev->devno ?
2714 tf->device | ATA_DEV1 : tf->device & ~ATA_DEV1;
2716 /* sanity check for pio multi commands */
2717 if ((cdb[1] & 0xe0) && !is_multi_taskfile(tf))
2720 if (is_multi_taskfile(tf)) {
2721 unsigned int multi_count = 1 << (cdb[1] >> 5);
2723 /* compare the passed through multi_count
2724 * with the cached multi_count of libata
2726 if (multi_count != dev->multi_count)
2727 ata_dev_printk(dev, KERN_WARNING,
2728 "invalid multi_count %u ignored\n",
2732 /* READ/WRITE LONG use a non-standard sect_size */
2733 qc->sect_size = ATA_SECT_SIZE;
2734 switch (tf->command) {
2735 case ATA_CMD_READ_LONG:
2736 case ATA_CMD_READ_LONG_ONCE:
2737 case ATA_CMD_WRITE_LONG:
2738 case ATA_CMD_WRITE_LONG_ONCE:
2739 if (tf->protocol != ATA_PROT_PIO || tf->nsect != 1)
2741 qc->sect_size = scsi_bufflen(scmd);
2745 * Filter SET_FEATURES - XFER MODE command -- otherwise,
2746 * SET_FEATURES - XFER MODE must be preceded/succeeded
2747 * by an update to hardware-specific registers for each
2748 * controller (i.e. the reason for ->set_piomode(),
2749 * ->set_dmamode(), and ->post_set_mode() hooks).
2751 if ((tf->command == ATA_CMD_SET_FEATURES)
2752 && (tf->feature == SETFEATURES_XFER))
2756 * Set flags so that all registers will be written,
2757 * and pass on write indication (used for PIO/DMA
2760 tf->flags |= (ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE);
2762 if (scmd->sc_data_direction == DMA_TO_DEVICE)
2763 tf->flags |= ATA_TFLAG_WRITE;
2766 * Set transfer length.
2768 * TODO: find out if we need to do more here to
2769 * cover scatter/gather case.
2771 qc->nbytes = scsi_bufflen(scmd);
2773 /* request result TF and be quiet about device error */
2774 qc->flags |= ATA_QCFLAG_RESULT_TF | ATA_QCFLAG_QUIET;
2779 ata_scsi_set_sense(scmd, ILLEGAL_REQUEST, 0x24, 0x00);
2780 /* "Invalid field in cdb" */
2785 * ata_get_xlat_func - check if SCSI to ATA translation is possible
2787 * @cmd: SCSI command opcode to consider
2789 * Look up the SCSI command given, and determine whether the
2790 * SCSI command is to be translated or simulated.
2793 * Pointer to translation function if possible, %NULL if not.
2796 static inline ata_xlat_func_t ata_get_xlat_func(struct ata_device *dev, u8 cmd)
2806 return ata_scsi_rw_xlat;
2808 case SYNCHRONIZE_CACHE:
2809 if (ata_try_flush_cache(dev))
2810 return ata_scsi_flush_xlat;
2815 return ata_scsi_verify_xlat;
2819 return ata_scsi_pass_thru;
2822 return ata_scsi_start_stop_xlat;
2829 * ata_scsi_dump_cdb - dump SCSI command contents to dmesg
2830 * @ap: ATA port to which the command was being sent
2831 * @cmd: SCSI command to dump
2833 * Prints the contents of a SCSI command via printk().
2836 static inline void ata_scsi_dump_cdb(struct ata_port *ap,
2837 struct scsi_cmnd *cmd)
2840 struct scsi_device *scsidev = cmd->device;
2841 u8 *scsicmd = cmd->cmnd;
2843 DPRINTK("CDB (%u:%d,%d,%d) %02x %02x %02x %02x %02x %02x %02x %02x %02x\n",
2845 scsidev->channel, scsidev->id, scsidev->lun,
2846 scsicmd[0], scsicmd[1], scsicmd[2], scsicmd[3],
2847 scsicmd[4], scsicmd[5], scsicmd[6], scsicmd[7],
2852 static inline int __ata_scsi_queuecmd(struct scsi_cmnd *scmd,
2853 void (*done)(struct scsi_cmnd *),
2854 struct ata_device *dev)
2856 u8 scsi_op = scmd->cmnd[0];
2857 ata_xlat_func_t xlat_func;
2860 if (dev->class == ATA_DEV_ATA) {
2861 if (unlikely(!scmd->cmd_len || scmd->cmd_len > dev->cdb_len))
2864 xlat_func = ata_get_xlat_func(dev, scsi_op);
2866 if (unlikely(!scmd->cmd_len))
2870 if (likely((scsi_op != ATA_16) || !atapi_passthru16)) {
2871 /* relay SCSI command to ATAPI device */
2872 if (unlikely(scmd->cmd_len > dev->cdb_len))
2875 xlat_func = atapi_xlat;
2877 /* ATA_16 passthru, treat as an ATA command */
2878 if (unlikely(scmd->cmd_len > 16))
2881 xlat_func = ata_get_xlat_func(dev, scsi_op);
2886 rc = ata_scsi_translate(dev, scmd, done, xlat_func);
2888 ata_scsi_simulate(dev, scmd, done);
2893 DPRINTK("bad CDB len=%u, scsi_op=0x%02x, max=%u\n",
2894 scmd->cmd_len, scsi_op, dev->cdb_len);
2895 scmd->result = DID_ERROR << 16;
2901 * ata_scsi_queuecmd - Issue SCSI cdb to libata-managed device
2902 * @cmd: SCSI command to be sent
2903 * @done: Completion function, called when command is complete
2905 * In some cases, this function translates SCSI commands into
2906 * ATA taskfiles, and queues the taskfiles to be sent to
2907 * hardware. In other cases, this function simulates a
2908 * SCSI device by evaluating and responding to certain
2909 * SCSI commands. This creates the overall effect of
2910 * ATA and ATAPI devices appearing as SCSI devices.
2913 * Releases scsi-layer-held lock, and obtains host lock.
2916 * Return value from __ata_scsi_queuecmd() if @cmd can be queued,
2919 int ata_scsi_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *))
2921 struct ata_port *ap;
2922 struct ata_device *dev;
2923 struct scsi_device *scsidev = cmd->device;
2924 struct Scsi_Host *shost = scsidev->host;
2927 ap = ata_shost_to_port(shost);
2929 spin_unlock(shost->host_lock);
2930 spin_lock(ap->lock);
2932 ata_scsi_dump_cdb(ap, cmd);
2934 dev = ata_scsi_find_dev(ap, scsidev);
2936 rc = __ata_scsi_queuecmd(cmd, done, dev);
2938 cmd->result = (DID_BAD_TARGET << 16);
2942 spin_unlock(ap->lock);
2943 spin_lock(shost->host_lock);
2948 * ata_scsi_simulate - simulate SCSI command on ATA device
2949 * @dev: the target device
2950 * @cmd: SCSI command being sent to device.
2951 * @done: SCSI command completion function.
2953 * Interprets and directly executes a select list of SCSI commands
2954 * that can be handled internally.
2957 * spin_lock_irqsave(host lock)
2960 void ata_scsi_simulate(struct ata_device *dev, struct scsi_cmnd *cmd,
2961 void (*done)(struct scsi_cmnd *))
2963 struct ata_scsi_args args;
2964 const u8 *scsicmd = cmd->cmnd;
2972 switch(scsicmd[0]) {
2973 /* TODO: worth improving? */
2975 ata_scsi_invalid_field(cmd, done);
2979 if (scsicmd[1] & 2) /* is CmdDt set? */
2980 ata_scsi_invalid_field(cmd, done);
2981 else if ((scsicmd[1] & 1) == 0) /* is EVPD clear? */
2982 ata_scsi_rbuf_fill(&args, ata_scsiop_inq_std);
2983 else switch (scsicmd[2]) {
2985 ata_scsi_rbuf_fill(&args, ata_scsiop_inq_00);
2988 ata_scsi_rbuf_fill(&args, ata_scsiop_inq_80);
2991 ata_scsi_rbuf_fill(&args, ata_scsiop_inq_83);
2994 ata_scsi_rbuf_fill(&args, ata_scsiop_inq_89);
2997 ata_scsi_invalid_field(cmd, done);
3004 ata_scsi_rbuf_fill(&args, ata_scsiop_mode_sense);
3007 case MODE_SELECT: /* unconditionally return */
3008 case MODE_SELECT_10: /* bad-field-in-cdb */
3009 ata_scsi_invalid_field(cmd, done);
3013 ata_scsi_rbuf_fill(&args, ata_scsiop_read_cap);
3016 case SERVICE_ACTION_IN:
3017 if ((scsicmd[1] & 0x1f) == SAI_READ_CAPACITY_16)
3018 ata_scsi_rbuf_fill(&args, ata_scsiop_read_cap);
3020 ata_scsi_invalid_field(cmd, done);
3024 ata_scsi_rbuf_fill(&args, ata_scsiop_report_luns);
3028 ata_scsi_set_sense(cmd, 0, 0, 0);
3029 cmd->result = (DRIVER_SENSE << 24);
3033 /* if we reach this, then writeback caching is disabled,
3034 * turning this into a no-op.
3036 case SYNCHRONIZE_CACHE:
3039 /* no-op's, complete with success */
3043 case TEST_UNIT_READY:
3044 ata_scsi_rbuf_fill(&args, ata_scsiop_noop);
3047 case SEND_DIAGNOSTIC:
3048 tmp8 = scsicmd[1] & ~(1 << 3);
3049 if ((tmp8 == 0x4) && (!scsicmd[3]) && (!scsicmd[4]))
3050 ata_scsi_rbuf_fill(&args, ata_scsiop_noop);
3052 ata_scsi_invalid_field(cmd, done);
3055 /* all other commands */
3057 ata_scsi_set_sense(cmd, ILLEGAL_REQUEST, 0x20, 0x0);
3058 /* "Invalid command operation code" */
3064 int ata_scsi_add_hosts(struct ata_host *host, struct scsi_host_template *sht)
3068 for (i = 0; i < host->n_ports; i++) {
3069 struct ata_port *ap = host->ports[i];
3070 struct Scsi_Host *shost;
3073 shost = scsi_host_alloc(sht, sizeof(struct ata_port *));
3077 *(struct ata_port **)&shost->hostdata[0] = ap;
3078 ap->scsi_host = shost;
3080 shost->transportt = &ata_scsi_transport_template;
3081 shost->unique_id = ap->print_id;
3084 shost->max_channel = 1;
3085 shost->max_cmd_len = 16;
3087 /* Schedule policy is determined by ->qc_defer()
3088 * callback and it needs to see every deferred qc.
3089 * Set host_blocked to 1 to prevent SCSI midlayer from
3090 * automatically deferring requests.
3092 shost->max_host_blocked = 1;
3094 rc = scsi_add_host(ap->scsi_host, ap->host->dev);
3102 scsi_host_put(host->ports[i]->scsi_host);
3105 struct Scsi_Host *shost = host->ports[i]->scsi_host;
3107 scsi_remove_host(shost);
3108 scsi_host_put(shost);
3113 void ata_scsi_scan_host(struct ata_port *ap, int sync)
3116 struct ata_device *last_failed_dev = NULL;
3117 struct ata_link *link;
3118 struct ata_device *dev;
3120 if (ap->flags & ATA_FLAG_DISABLED)
3124 ata_port_for_each_link(link, ap) {
3125 ata_link_for_each_dev(dev, link) {
3126 struct scsi_device *sdev;
3127 int channel = 0, id = 0;
3129 if (!ata_dev_enabled(dev) || dev->sdev)
3132 if (ata_is_host_link(link))
3135 channel = link->pmp;
3137 sdev = __scsi_add_device(ap->scsi_host, channel, id, 0,
3139 if (!IS_ERR(sdev)) {
3141 scsi_device_put(sdev);
3146 /* If we scanned while EH was in progress or allocation
3147 * failure occurred, scan would have failed silently. Check
3148 * whether all devices are attached.
3150 ata_port_for_each_link(link, ap) {
3151 ata_link_for_each_dev(dev, link) {
3152 if (ata_dev_enabled(dev) && !dev->sdev)
3160 /* we're missing some SCSI devices */
3162 /* If caller requested synchrnous scan && we've made
3163 * any progress, sleep briefly and repeat.
3165 if (dev != last_failed_dev) {
3167 last_failed_dev = dev;
3171 /* We might be failing to detect boot device, give it
3172 * a few more chances.
3179 ata_port_printk(ap, KERN_ERR, "WARNING: synchronous SCSI scan "
3180 "failed without making any progress,\n"
3181 " switching to async\n");
3184 queue_delayed_work(ata_aux_wq, &ap->hotplug_task,
3185 round_jiffies_relative(HZ));
3189 * ata_scsi_offline_dev - offline attached SCSI device
3190 * @dev: ATA device to offline attached SCSI device for
3192 * This function is called from ata_eh_hotplug() and responsible
3193 * for taking the SCSI device attached to @dev offline. This
3194 * function is called with host lock which protects dev->sdev
3198 * spin_lock_irqsave(host lock)
3201 * 1 if attached SCSI device exists, 0 otherwise.
3203 int ata_scsi_offline_dev(struct ata_device *dev)
3206 scsi_device_set_state(dev->sdev, SDEV_OFFLINE);
3213 * ata_scsi_remove_dev - remove attached SCSI device
3214 * @dev: ATA device to remove attached SCSI device for
3216 * This function is called from ata_eh_scsi_hotplug() and
3217 * responsible for removing the SCSI device attached to @dev.
3220 * Kernel thread context (may sleep).
3222 static void ata_scsi_remove_dev(struct ata_device *dev)
3224 struct ata_port *ap = dev->link->ap;
3225 struct scsi_device *sdev;
3226 unsigned long flags;
3228 /* Alas, we need to grab scan_mutex to ensure SCSI device
3229 * state doesn't change underneath us and thus
3230 * scsi_device_get() always succeeds. The mutex locking can
3231 * be removed if there is __scsi_device_get() interface which
3232 * increments reference counts regardless of device state.
3234 mutex_lock(&ap->scsi_host->scan_mutex);
3235 spin_lock_irqsave(ap->lock, flags);
3237 /* clearing dev->sdev is protected by host lock */
3242 /* If user initiated unplug races with us, sdev can go
3243 * away underneath us after the host lock and
3244 * scan_mutex are released. Hold onto it.
3246 if (scsi_device_get(sdev) == 0) {
3247 /* The following ensures the attached sdev is
3248 * offline on return from ata_scsi_offline_dev()
3249 * regardless it wins or loses the race
3250 * against this function.
3252 scsi_device_set_state(sdev, SDEV_OFFLINE);
3259 spin_unlock_irqrestore(ap->lock, flags);
3260 mutex_unlock(&ap->scsi_host->scan_mutex);
3263 ata_dev_printk(dev, KERN_INFO, "detaching (SCSI %s)\n",
3264 sdev->sdev_gendev.bus_id);
3266 scsi_remove_device(sdev);
3267 scsi_device_put(sdev);
3271 static void ata_scsi_handle_link_detach(struct ata_link *link)
3273 struct ata_port *ap = link->ap;
3274 struct ata_device *dev;
3276 ata_link_for_each_dev(dev, link) {
3277 unsigned long flags;
3279 if (!(dev->flags & ATA_DFLAG_DETACHED))
3282 spin_lock_irqsave(ap->lock, flags);
3283 dev->flags &= ~ATA_DFLAG_DETACHED;
3284 spin_unlock_irqrestore(ap->lock, flags);
3286 ata_scsi_remove_dev(dev);
3291 * ata_scsi_media_change_notify - send media change event
3292 * @dev: Pointer to the disk device with media change event
3294 * Tell the block layer to send a media change notification
3298 * spin_lock_irqsave(host lock)
3300 void ata_scsi_media_change_notify(struct ata_device *dev)
3303 sdev_evt_send_simple(dev->sdev, SDEV_EVT_MEDIA_CHANGE,
3308 * ata_scsi_hotplug - SCSI part of hotplug
3309 * @work: Pointer to ATA port to perform SCSI hotplug on
3311 * Perform SCSI part of hotplug. It's executed from a separate
3312 * workqueue after EH completes. This is necessary because SCSI
3313 * hot plugging requires working EH and hot unplugging is
3314 * synchronized with hot plugging with a mutex.
3317 * Kernel thread context (may sleep).
3319 void ata_scsi_hotplug(struct work_struct *work)
3321 struct ata_port *ap =
3322 container_of(work, struct ata_port, hotplug_task.work);
3325 if (ap->pflags & ATA_PFLAG_UNLOADING) {
3326 DPRINTK("ENTER/EXIT - unloading\n");
3332 /* Unplug detached devices. We cannot use link iterator here
3333 * because PMP links have to be scanned even if PMP is
3334 * currently not attached. Iterate manually.
3336 ata_scsi_handle_link_detach(&ap->link);
3338 for (i = 0; i < SATA_PMP_MAX_PORTS; i++)
3339 ata_scsi_handle_link_detach(&ap->pmp_link[i]);
3341 /* scan for new ones */
3342 ata_scsi_scan_host(ap, 0);
3348 * ata_scsi_user_scan - indication for user-initiated bus scan
3349 * @shost: SCSI host to scan
3350 * @channel: Channel to scan
3354 * This function is called when user explicitly requests bus
3355 * scan. Set probe pending flag and invoke EH.
3358 * SCSI layer (we don't care)
3363 static int ata_scsi_user_scan(struct Scsi_Host *shost, unsigned int channel,
3364 unsigned int id, unsigned int lun)
3366 struct ata_port *ap = ata_shost_to_port(shost);
3367 unsigned long flags;
3370 if (!ap->ops->error_handler)
3373 if (lun != SCAN_WILD_CARD && lun)
3376 if (ap->nr_pmp_links == 0) {
3377 if (channel != SCAN_WILD_CARD && channel)
3381 if (id != SCAN_WILD_CARD && id)
3386 spin_lock_irqsave(ap->lock, flags);
3388 if (devno == SCAN_WILD_CARD) {
3389 struct ata_link *link;
3391 ata_port_for_each_link(link, ap) {
3392 struct ata_eh_info *ehi = &link->eh_info;
3393 ehi->probe_mask |= (1 << ata_link_max_devices(link)) - 1;
3394 ehi->action |= ATA_EH_SOFTRESET;
3397 struct ata_device *dev = ata_find_dev(ap, devno);
3400 struct ata_eh_info *ehi = &dev->link->eh_info;
3401 ehi->probe_mask |= 1 << dev->devno;
3402 ehi->action |= ATA_EH_SOFTRESET;
3403 ehi->flags |= ATA_EHI_RESUME_LINK;
3409 ata_port_schedule_eh(ap);
3410 spin_unlock_irqrestore(ap->lock, flags);
3411 ata_port_wait_eh(ap);
3413 spin_unlock_irqrestore(ap->lock, flags);
3419 * ata_scsi_dev_rescan - initiate scsi_rescan_device()
3420 * @work: Pointer to ATA port to perform scsi_rescan_device()
3422 * After ATA pass thru (SAT) commands are executed successfully,
3423 * libata need to propagate the changes to SCSI layer. This
3424 * function must be executed from ata_aux_wq such that sdev
3425 * attach/detach don't race with rescan.
3428 * Kernel thread context (may sleep).
3430 void ata_scsi_dev_rescan(struct work_struct *work)
3432 struct ata_port *ap =
3433 container_of(work, struct ata_port, scsi_rescan_task);
3434 struct ata_link *link;
3435 struct ata_device *dev;
3436 unsigned long flags;
3438 spin_lock_irqsave(ap->lock, flags);
3440 ata_port_for_each_link(link, ap) {
3441 ata_link_for_each_dev(dev, link) {
3442 struct scsi_device *sdev = dev->sdev;
3444 if (!ata_dev_enabled(dev) || !sdev)
3446 if (scsi_device_get(sdev))
3449 spin_unlock_irqrestore(ap->lock, flags);
3450 scsi_rescan_device(&(sdev->sdev_gendev));
3451 scsi_device_put(sdev);
3452 spin_lock_irqsave(ap->lock, flags);
3456 spin_unlock_irqrestore(ap->lock, flags);
3460 * ata_sas_port_alloc - Allocate port for a SAS attached SATA device
3461 * @host: ATA host container for all SAS ports
3462 * @port_info: Information from low-level host driver
3463 * @shost: SCSI host that the scsi device is attached to
3466 * PCI/etc. bus probe sem.
3469 * ata_port pointer on success / NULL on failure.
3472 struct ata_port *ata_sas_port_alloc(struct ata_host *host,
3473 struct ata_port_info *port_info,
3474 struct Scsi_Host *shost)
3476 struct ata_port *ap;
3478 ap = ata_port_alloc(host);
3483 ap->lock = shost->host_lock;
3484 ap->pio_mask = port_info->pio_mask;
3485 ap->mwdma_mask = port_info->mwdma_mask;
3486 ap->udma_mask = port_info->udma_mask;
3487 ap->flags |= port_info->flags;
3488 ap->ops = port_info->port_ops;
3489 ap->cbl = ATA_CBL_SATA;
3493 EXPORT_SYMBOL_GPL(ata_sas_port_alloc);
3496 * ata_sas_port_start - Set port up for dma.
3497 * @ap: Port to initialize
3499 * Called just after data structures for each port are
3500 * initialized. Allocates DMA pad.
3502 * May be used as the port_start() entry in ata_port_operations.
3505 * Inherited from caller.
3507 int ata_sas_port_start(struct ata_port *ap)
3509 return ata_pad_alloc(ap, ap->dev);
3511 EXPORT_SYMBOL_GPL(ata_sas_port_start);
3514 * ata_port_stop - Undo ata_sas_port_start()
3515 * @ap: Port to shut down
3517 * Frees the DMA pad.
3519 * May be used as the port_stop() entry in ata_port_operations.
3522 * Inherited from caller.
3525 void ata_sas_port_stop(struct ata_port *ap)
3527 ata_pad_free(ap, ap->dev);
3529 EXPORT_SYMBOL_GPL(ata_sas_port_stop);
3532 * ata_sas_port_init - Initialize a SATA device
3533 * @ap: SATA port to initialize
3536 * PCI/etc. bus probe sem.
3539 * Zero on success, non-zero on error.
3542 int ata_sas_port_init(struct ata_port *ap)
3544 int rc = ap->ops->port_start(ap);
3547 ap->print_id = ata_print_id++;
3548 rc = ata_bus_probe(ap);
3553 EXPORT_SYMBOL_GPL(ata_sas_port_init);
3556 * ata_sas_port_destroy - Destroy a SATA port allocated by ata_sas_port_alloc
3557 * @ap: SATA port to destroy
3561 void ata_sas_port_destroy(struct ata_port *ap)
3563 if (ap->ops->port_stop)
3564 ap->ops->port_stop(ap);
3567 EXPORT_SYMBOL_GPL(ata_sas_port_destroy);
3570 * ata_sas_slave_configure - Default slave_config routine for libata devices
3571 * @sdev: SCSI device to configure
3572 * @ap: ATA port to which SCSI device is attached
3578 int ata_sas_slave_configure(struct scsi_device *sdev, struct ata_port *ap)
3580 ata_scsi_sdev_config(sdev);
3581 ata_scsi_dev_config(sdev, ap->link.device);
3584 EXPORT_SYMBOL_GPL(ata_sas_slave_configure);
3587 * ata_sas_queuecmd - Issue SCSI cdb to libata-managed device
3588 * @cmd: SCSI command to be sent
3589 * @done: Completion function, called when command is complete
3590 * @ap: ATA port to which the command is being sent
3593 * Return value from __ata_scsi_queuecmd() if @cmd can be queued,
3597 int ata_sas_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *),
3598 struct ata_port *ap)
3602 ata_scsi_dump_cdb(ap, cmd);
3604 if (likely(ata_scsi_dev_enabled(ap->link.device)))
3605 rc = __ata_scsi_queuecmd(cmd, done, ap->link.device);
3607 cmd->result = (DID_BAD_TARGET << 16);
3612 EXPORT_SYMBOL_GPL(ata_sas_queuecmd);