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 <asm/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 void ata_scsi_invalid_field(struct scsi_cmnd *cmd,
114 void (*done)(struct scsi_cmnd *))
116 ata_scsi_set_sense(cmd, ILLEGAL_REQUEST, 0x24, 0x0);
117 /* "Invalid field in cbd" */
122 * ata_std_bios_param - generic bios head/sector/cylinder calculator used by sd.
123 * @sdev: SCSI device for which BIOS geometry is to be determined
124 * @bdev: block device associated with @sdev
125 * @capacity: capacity of SCSI device
126 * @geom: location to which geometry will be output
128 * Generic bios head/sector/cylinder calculator
129 * used by sd. Most BIOSes nowadays expect a XXX/255/16 (CHS)
130 * mapping. Some situations may arise where the disk is not
131 * bootable if this is not used.
134 * Defined by the SCSI layer. We don't really care.
139 int ata_std_bios_param(struct scsi_device *sdev, struct block_device *bdev,
140 sector_t capacity, int geom[])
144 sector_div(capacity, 255*63);
151 * ata_get_identity - Handler for HDIO_GET_IDENTITY ioctl
152 * @sdev: SCSI device to get identify data for
153 * @arg: User buffer area for identify data
156 * Defined by the SCSI layer. We don't really care.
159 * Zero on success, negative errno on error.
161 static int ata_get_identity(struct scsi_device *sdev, void __user *arg)
163 struct ata_port *ap = ata_shost_to_port(sdev->host);
164 struct ata_device *dev = ata_scsi_find_dev(ap, sdev);
165 u16 __user *dst = arg;
171 if (copy_to_user(dst, dev->id, ATA_ID_WORDS * sizeof(u16)))
174 ata_id_string(dev->id, buf, ATA_ID_PROD, ATA_ID_PROD_LEN);
175 if (copy_to_user(dst + ATA_ID_PROD, buf, ATA_ID_PROD_LEN))
178 ata_id_string(dev->id, buf, ATA_ID_FW_REV, ATA_ID_FW_REV_LEN);
179 if (copy_to_user(dst + ATA_ID_FW_REV, buf, ATA_ID_FW_REV_LEN))
182 ata_id_string(dev->id, buf, ATA_ID_SERNO, ATA_ID_SERNO_LEN);
183 if (copy_to_user(dst + ATA_ID_SERNO, buf, ATA_ID_SERNO_LEN))
190 * ata_cmd_ioctl - Handler for HDIO_DRIVE_CMD ioctl
191 * @scsidev: Device to which we are issuing command
192 * @arg: User provided data for issuing command
195 * Defined by the SCSI layer. We don't really care.
198 * Zero on success, negative errno on error.
200 int ata_cmd_ioctl(struct scsi_device *scsidev, void __user *arg)
203 u8 scsi_cmd[MAX_COMMAND_SIZE];
204 u8 args[4], *argbuf = NULL, *sensebuf = NULL;
206 enum dma_data_direction data_dir;
212 if (copy_from_user(args, arg, sizeof(args)))
215 sensebuf = kzalloc(SCSI_SENSE_BUFFERSIZE, GFP_NOIO);
219 memset(scsi_cmd, 0, sizeof(scsi_cmd));
222 argsize = SECTOR_SIZE * args[3];
223 argbuf = kmalloc(argsize, GFP_KERNEL);
224 if (argbuf == NULL) {
229 scsi_cmd[1] = (4 << 1); /* PIO Data-in */
230 scsi_cmd[2] = 0x0e; /* no off.line or cc, read from dev,
231 block count in sector count field */
232 data_dir = DMA_FROM_DEVICE;
234 scsi_cmd[1] = (3 << 1); /* Non-data */
235 scsi_cmd[2] = 0x20; /* cc but no off.line or data xfer */
239 scsi_cmd[0] = ATA_16;
241 scsi_cmd[4] = args[2];
242 if (args[0] == WIN_SMART) { /* hack -- ide driver does this too... */
243 scsi_cmd[6] = args[3];
244 scsi_cmd[8] = args[1];
248 scsi_cmd[6] = args[1];
250 scsi_cmd[14] = args[0];
252 /* Good values for timeout and retries? Values below
253 from scsi_ioctl_send_command() for default case... */
254 cmd_result = scsi_execute(scsidev, scsi_cmd, data_dir, argbuf, argsize,
255 sensebuf, (10*HZ), 5, 0);
257 if (driver_byte(cmd_result) == DRIVER_SENSE) {/* sense data available */
258 u8 *desc = sensebuf + 8;
259 cmd_result &= ~(0xFF<<24); /* DRIVER_SENSE is not an error */
261 /* If we set cc then ATA pass-through will cause a
262 * check condition even if no error. Filter that. */
263 if (cmd_result & SAM_STAT_CHECK_CONDITION) {
264 struct scsi_sense_hdr sshdr;
265 scsi_normalize_sense(sensebuf, SCSI_SENSE_BUFFERSIZE,
267 if (sshdr.sense_key==0 &&
268 sshdr.asc==0 && sshdr.ascq==0)
269 cmd_result &= ~SAM_STAT_CHECK_CONDITION;
272 /* Send userspace a few ATA registers (same as drivers/ide) */
273 if (sensebuf[0] == 0x72 && /* format is "descriptor" */
274 desc[0] == 0x09 ) { /* code is "ATA Descriptor" */
275 args[0] = desc[13]; /* status */
276 args[1] = desc[3]; /* error */
277 args[2] = desc[5]; /* sector count (0:7) */
278 if (copy_to_user(arg, args, sizeof(args)))
290 && copy_to_user(arg + sizeof(args), argbuf, argsize))
299 * ata_task_ioctl - Handler for HDIO_DRIVE_TASK ioctl
300 * @scsidev: Device to which we are issuing command
301 * @arg: User provided data for issuing command
304 * Defined by the SCSI layer. We don't really care.
307 * Zero on success, negative errno on error.
309 int ata_task_ioctl(struct scsi_device *scsidev, void __user *arg)
312 u8 scsi_cmd[MAX_COMMAND_SIZE];
313 u8 args[7], *sensebuf = NULL;
319 if (copy_from_user(args, arg, sizeof(args)))
322 sensebuf = kzalloc(SCSI_SENSE_BUFFERSIZE, GFP_NOIO);
326 memset(scsi_cmd, 0, sizeof(scsi_cmd));
327 scsi_cmd[0] = ATA_16;
328 scsi_cmd[1] = (3 << 1); /* Non-data */
329 scsi_cmd[2] = 0x20; /* cc but no off.line or data xfer */
330 scsi_cmd[4] = args[1];
331 scsi_cmd[6] = args[2];
332 scsi_cmd[8] = args[3];
333 scsi_cmd[10] = args[4];
334 scsi_cmd[12] = args[5];
335 scsi_cmd[13] = args[6] & 0x4f;
336 scsi_cmd[14] = args[0];
338 /* Good values for timeout and retries? Values below
339 from scsi_ioctl_send_command() for default case... */
340 cmd_result = scsi_execute(scsidev, scsi_cmd, DMA_NONE, NULL, 0,
341 sensebuf, (10*HZ), 5, 0);
343 if (driver_byte(cmd_result) == DRIVER_SENSE) {/* sense data available */
344 u8 *desc = sensebuf + 8;
345 cmd_result &= ~(0xFF<<24); /* DRIVER_SENSE is not an error */
347 /* If we set cc then ATA pass-through will cause a
348 * check condition even if no error. Filter that. */
349 if (cmd_result & SAM_STAT_CHECK_CONDITION) {
350 struct scsi_sense_hdr sshdr;
351 scsi_normalize_sense(sensebuf, SCSI_SENSE_BUFFERSIZE,
353 if (sshdr.sense_key==0 &&
354 sshdr.asc==0 && sshdr.ascq==0)
355 cmd_result &= ~SAM_STAT_CHECK_CONDITION;
358 /* Send userspace ATA registers */
359 if (sensebuf[0] == 0x72 && /* format is "descriptor" */
360 desc[0] == 0x09) {/* code is "ATA Descriptor" */
361 args[0] = desc[13]; /* status */
362 args[1] = desc[3]; /* error */
363 args[2] = desc[5]; /* sector count (0:7) */
364 args[3] = desc[7]; /* lbal */
365 args[4] = desc[9]; /* lbam */
366 args[5] = desc[11]; /* lbah */
367 args[6] = desc[12]; /* select */
368 if (copy_to_user(arg, args, sizeof(args)))
383 int ata_scsi_ioctl(struct scsi_device *scsidev, int cmd, void __user *arg)
385 int val = -EINVAL, rc = -EINVAL;
388 case ATA_IOC_GET_IO32:
390 if (copy_to_user(arg, &val, 1))
394 case ATA_IOC_SET_IO32:
395 val = (unsigned long) arg;
400 case HDIO_GET_IDENTITY:
401 return ata_get_identity(scsidev, arg);
404 if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO))
406 return ata_cmd_ioctl(scsidev, arg);
408 case HDIO_DRIVE_TASK:
409 if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO))
411 return ata_task_ioctl(scsidev, arg);
422 * ata_scsi_qc_new - acquire new ata_queued_cmd reference
423 * @dev: ATA device to which the new command is attached
424 * @cmd: SCSI command that originated this ATA command
425 * @done: SCSI command completion function
427 * Obtain a reference to an unused ata_queued_cmd structure,
428 * which is the basic libata structure representing a single
429 * ATA command sent to the hardware.
431 * If a command was available, fill in the SCSI-specific
432 * portions of the structure with information on the
436 * spin_lock_irqsave(host lock)
439 * Command allocated, or %NULL if none available.
441 static struct ata_queued_cmd *ata_scsi_qc_new(struct ata_device *dev,
442 struct scsi_cmnd *cmd,
443 void (*done)(struct scsi_cmnd *))
445 struct ata_queued_cmd *qc;
447 qc = ata_qc_new_init(dev);
452 qc->__sg = scsi_sglist(cmd);
453 qc->n_elem = scsi_sg_count(cmd);
455 cmd->result = (DID_OK << 16) | (QUEUE_FULL << 1);
463 * ata_dump_status - user friendly display of error info
464 * @id: id of the port in question
465 * @tf: ptr to filled out taskfile
467 * Decode and dump the ATA error/status registers for the user so
468 * that they have some idea what really happened at the non
469 * make-believe layer.
472 * inherited from caller
474 static void ata_dump_status(unsigned id, struct ata_taskfile *tf)
476 u8 stat = tf->command, err = tf->feature;
478 printk(KERN_WARNING "ata%u: status=0x%02x { ", id, stat);
479 if (stat & ATA_BUSY) {
480 printk("Busy }\n"); /* Data is not valid in this case */
482 if (stat & 0x40) printk("DriveReady ");
483 if (stat & 0x20) printk("DeviceFault ");
484 if (stat & 0x10) printk("SeekComplete ");
485 if (stat & 0x08) printk("DataRequest ");
486 if (stat & 0x04) printk("CorrectedError ");
487 if (stat & 0x02) printk("Index ");
488 if (stat & 0x01) printk("Error ");
492 printk(KERN_WARNING "ata%u: error=0x%02x { ", id, err);
493 if (err & 0x04) printk("DriveStatusError ");
495 if (err & 0x04) printk("BadCRC ");
496 else printk("Sector ");
498 if (err & 0x40) printk("UncorrectableError ");
499 if (err & 0x10) printk("SectorIdNotFound ");
500 if (err & 0x02) printk("TrackZeroNotFound ");
501 if (err & 0x01) printk("AddrMarkNotFound ");
508 * ata_to_sense_error - convert ATA error to SCSI error
509 * @id: ATA device number
510 * @drv_stat: value contained in ATA status register
511 * @drv_err: value contained in ATA error register
512 * @sk: the sense key we'll fill out
513 * @asc: the additional sense code we'll fill out
514 * @ascq: the additional sense code qualifier we'll fill out
515 * @verbose: be verbose
517 * Converts an ATA error into a SCSI error. Fill out pointers to
518 * SK, ASC, and ASCQ bytes for later use in fixed or descriptor
519 * format sense blocks.
522 * spin_lock_irqsave(host lock)
524 static void ata_to_sense_error(unsigned id, u8 drv_stat, u8 drv_err, u8 *sk,
525 u8 *asc, u8 *ascq, int verbose)
529 /* Based on the 3ware driver translation table */
530 static const unsigned char sense_table[][4] = {
532 {0xd1, ABORTED_COMMAND, 0x00, 0x00}, // Device busy Aborted command
534 {0xd0, ABORTED_COMMAND, 0x00, 0x00}, // Device busy Aborted command
536 {0x61, HARDWARE_ERROR, 0x00, 0x00}, // Device fault Hardware error
537 /* ICRC|ABRT */ /* NB: ICRC & !ABRT is BBD */
538 {0x84, ABORTED_COMMAND, 0x47, 0x00}, // Data CRC error SCSI parity error
539 /* MC|ID|ABRT|TRK0|MARK */
540 {0x37, NOT_READY, 0x04, 0x00}, // Unit offline Not ready
542 {0x09, NOT_READY, 0x04, 0x00}, // Unrecovered disk error Not ready
543 /* Bad address mark */
544 {0x01, MEDIUM_ERROR, 0x13, 0x00}, // Address mark not found Address mark not found for data field
546 {0x02, HARDWARE_ERROR, 0x00, 0x00}, // Track 0 not found Hardware error
548 {0x04, ABORTED_COMMAND, 0x00, 0x00}, // Aborted command Aborted command
549 /* Media change request */
550 {0x08, NOT_READY, 0x04, 0x00}, // Media change request FIXME: faking offline
552 {0x10, ABORTED_COMMAND, 0x14, 0x00}, // ID not found Recorded entity not found
554 {0x08, NOT_READY, 0x04, 0x00}, // Media change FIXME: faking offline
556 {0x40, MEDIUM_ERROR, 0x11, 0x04}, // Uncorrectable ECC error Unrecovered read error
557 /* BBD - block marked bad */
558 {0x80, MEDIUM_ERROR, 0x11, 0x04}, // Block marked bad Medium error, unrecovered read error
559 {0xFF, 0xFF, 0xFF, 0xFF}, // END mark
561 static const unsigned char stat_table[][4] = {
562 /* Must be first because BUSY means no other bits valid */
563 {0x80, ABORTED_COMMAND, 0x47, 0x00}, // Busy, fake parity for now
564 {0x20, HARDWARE_ERROR, 0x00, 0x00}, // Device fault
565 {0x08, ABORTED_COMMAND, 0x47, 0x00}, // Timed out in xfer, fake parity for now
566 {0x04, RECOVERED_ERROR, 0x11, 0x00}, // Recovered ECC error Medium error, recovered
567 {0xFF, 0xFF, 0xFF, 0xFF}, // END mark
571 * Is this an error we can process/parse
573 if (drv_stat & ATA_BUSY) {
574 drv_err = 0; /* Ignore the err bits, they're invalid */
578 /* Look for drv_err */
579 for (i = 0; sense_table[i][0] != 0xFF; i++) {
580 /* Look for best matches first */
581 if ((sense_table[i][0] & drv_err) ==
583 *sk = sense_table[i][1];
584 *asc = sense_table[i][2];
585 *ascq = sense_table[i][3];
589 /* No immediate match */
591 printk(KERN_WARNING "ata%u: no sense translation for "
592 "error 0x%02x\n", id, drv_err);
595 /* Fall back to interpreting status bits */
596 for (i = 0; stat_table[i][0] != 0xFF; i++) {
597 if (stat_table[i][0] & drv_stat) {
598 *sk = stat_table[i][1];
599 *asc = stat_table[i][2];
600 *ascq = stat_table[i][3];
604 /* No error? Undecoded? */
606 printk(KERN_WARNING "ata%u: no sense translation for "
607 "status: 0x%02x\n", id, drv_stat);
609 /* We need a sensible error return here, which is tricky, and one
610 that won't cause people to do things like return a disk wrongly */
611 *sk = ABORTED_COMMAND;
617 printk(KERN_ERR "ata%u: translated ATA stat/err 0x%02x/%02x "
618 "to SCSI SK/ASC/ASCQ 0x%x/%02x/%02x\n",
619 id, drv_stat, drv_err, *sk, *asc, *ascq);
624 * ata_gen_passthru_sense - Generate check condition sense block.
625 * @qc: Command that completed.
627 * This function is specific to the ATA descriptor format sense
628 * block specified for the ATA pass through commands. Regardless
629 * of whether the command errored or not, return a sense
630 * block. Copy all controller registers into the sense
631 * block. Clear sense key, ASC & ASCQ if there is no error.
636 static void ata_gen_passthru_sense(struct ata_queued_cmd *qc)
638 struct scsi_cmnd *cmd = qc->scsicmd;
639 struct ata_taskfile *tf = &qc->result_tf;
640 unsigned char *sb = cmd->sense_buffer;
641 unsigned char *desc = sb + 8;
642 int verbose = qc->ap->ops->error_handler == NULL;
644 memset(sb, 0, SCSI_SENSE_BUFFERSIZE);
646 cmd->result = (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION;
649 * Use ata_to_sense_error() to map status register bits
650 * onto sense key, asc & ascq.
653 tf->command & (ATA_BUSY | ATA_DF | ATA_ERR | ATA_DRQ)) {
654 ata_to_sense_error(qc->ap->print_id, tf->command, tf->feature,
655 &sb[1], &sb[2], &sb[3], verbose);
660 * Sense data is current and format is descriptor.
666 /* set length of additional sense data */
671 * Copy registers into sense buffer.
674 desc[3] = tf->feature; /* == error reg */
679 desc[12] = tf->device;
680 desc[13] = tf->command; /* == status reg */
683 * Fill in Extend bit, and the high order bytes
686 if (tf->flags & ATA_TFLAG_LBA48) {
688 desc[4] = tf->hob_nsect;
689 desc[6] = tf->hob_lbal;
690 desc[8] = tf->hob_lbam;
691 desc[10] = tf->hob_lbah;
696 * ata_gen_ata_sense - generate a SCSI fixed sense block
697 * @qc: Command that we are erroring out
699 * Generate sense block for a failed ATA command @qc. Descriptor
700 * format is used to accomodate LBA48 block address.
705 static void ata_gen_ata_sense(struct ata_queued_cmd *qc)
707 struct ata_device *dev = qc->dev;
708 struct scsi_cmnd *cmd = qc->scsicmd;
709 struct ata_taskfile *tf = &qc->result_tf;
710 unsigned char *sb = cmd->sense_buffer;
711 unsigned char *desc = sb + 8;
712 int verbose = qc->ap->ops->error_handler == NULL;
715 memset(sb, 0, SCSI_SENSE_BUFFERSIZE);
717 cmd->result = (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION;
719 /* sense data is current and format is descriptor */
722 /* Use ata_to_sense_error() to map status register bits
723 * onto sense key, asc & ascq.
726 tf->command & (ATA_BUSY | ATA_DF | ATA_ERR | ATA_DRQ)) {
727 ata_to_sense_error(qc->ap->print_id, tf->command, tf->feature,
728 &sb[1], &sb[2], &sb[3], verbose);
732 block = ata_tf_read_block(&qc->result_tf, dev);
734 /* information sense data descriptor */
739 desc[2] |= 0x80; /* valid */
740 desc[6] = block >> 40;
741 desc[7] = block >> 32;
742 desc[8] = block >> 24;
743 desc[9] = block >> 16;
744 desc[10] = block >> 8;
748 static void ata_scsi_sdev_config(struct scsi_device *sdev)
750 sdev->use_10_for_rw = 1;
751 sdev->use_10_for_ms = 1;
753 /* Schedule policy is determined by ->qc_defer() callback and
754 * it needs to see every deferred qc. Set dev_blocked to 1 to
755 * prevent SCSI midlayer from automatically deferring
758 sdev->max_device_blocked = 1;
761 static void ata_scsi_dev_config(struct scsi_device *sdev,
762 struct ata_device *dev)
764 /* configure max sectors */
765 blk_queue_max_sectors(sdev->request_queue, dev->max_sectors);
767 /* SATA DMA transfers must be multiples of 4 byte, so
768 * we need to pad ATAPI transfers using an extra sg.
769 * Decrement max hw segments accordingly.
771 if (dev->class == ATA_DEV_ATAPI) {
772 struct request_queue *q = sdev->request_queue;
773 blk_queue_max_hw_segments(q, q->max_hw_segments - 1);
776 if (dev->flags & ATA_DFLAG_NCQ) {
779 depth = min(sdev->host->can_queue, ata_id_queue_depth(dev->id));
780 depth = min(ATA_MAX_QUEUE - 1, depth);
781 scsi_adjust_queue_depth(sdev, MSG_SIMPLE_TAG, depth);
786 * ata_scsi_slave_config - Set SCSI device attributes
787 * @sdev: SCSI device to examine
789 * This is called before we actually start reading
790 * and writing to the device, to configure certain
791 * SCSI mid-layer behaviors.
794 * Defined by SCSI layer. We don't really care.
797 int ata_scsi_slave_config(struct scsi_device *sdev)
799 struct ata_port *ap = ata_shost_to_port(sdev->host);
800 struct ata_device *dev = __ata_scsi_find_dev(ap, sdev);
802 ata_scsi_sdev_config(sdev);
804 blk_queue_max_phys_segments(sdev->request_queue, LIBATA_MAX_PRD);
806 sdev->manage_start_stop = 1;
809 ata_scsi_dev_config(sdev, dev);
811 return 0; /* scsi layer doesn't check return value, sigh */
815 * ata_scsi_slave_destroy - SCSI device is about to be destroyed
816 * @sdev: SCSI device to be destroyed
818 * @sdev is about to be destroyed for hot/warm unplugging. If
819 * this unplugging was initiated by libata as indicated by NULL
820 * dev->sdev, this function doesn't have to do anything.
821 * Otherwise, SCSI layer initiated warm-unplug is in progress.
822 * Clear dev->sdev, schedule the device for ATA detach and invoke
826 * Defined by SCSI layer. We don't really care.
828 void ata_scsi_slave_destroy(struct scsi_device *sdev)
830 struct ata_port *ap = ata_shost_to_port(sdev->host);
832 struct ata_device *dev;
834 if (!ap->ops->error_handler)
837 spin_lock_irqsave(ap->lock, flags);
838 dev = __ata_scsi_find_dev(ap, sdev);
839 if (dev && dev->sdev) {
840 /* SCSI device already in CANCEL state, no need to offline it */
842 dev->flags |= ATA_DFLAG_DETACH;
843 ata_port_schedule_eh(ap);
845 spin_unlock_irqrestore(ap->lock, flags);
849 * ata_scsi_change_queue_depth - SCSI callback for queue depth config
850 * @sdev: SCSI device to configure queue depth for
851 * @queue_depth: new queue depth
853 * This is libata standard hostt->change_queue_depth callback.
854 * SCSI will call into this callback when user tries to set queue
858 * SCSI layer (we don't care)
861 * Newly configured queue depth.
863 int ata_scsi_change_queue_depth(struct scsi_device *sdev, int queue_depth)
865 struct ata_port *ap = ata_shost_to_port(sdev->host);
866 struct ata_device *dev;
869 if (queue_depth < 1 || queue_depth == sdev->queue_depth)
870 return sdev->queue_depth;
872 dev = ata_scsi_find_dev(ap, sdev);
873 if (!dev || !ata_dev_enabled(dev))
874 return sdev->queue_depth;
877 spin_lock_irqsave(ap->lock, flags);
878 dev->flags &= ~ATA_DFLAG_NCQ_OFF;
879 if (queue_depth == 1 || !ata_ncq_enabled(dev)) {
880 dev->flags |= ATA_DFLAG_NCQ_OFF;
883 spin_unlock_irqrestore(ap->lock, flags);
885 /* limit and apply queue depth */
886 queue_depth = min(queue_depth, sdev->host->can_queue);
887 queue_depth = min(queue_depth, ata_id_queue_depth(dev->id));
888 queue_depth = min(queue_depth, ATA_MAX_QUEUE - 1);
890 if (sdev->queue_depth == queue_depth)
893 scsi_adjust_queue_depth(sdev, MSG_SIMPLE_TAG, queue_depth);
897 /* XXX: for spindown warning */
898 static void ata_delayed_done_timerfn(unsigned long arg)
900 struct scsi_cmnd *scmd = (void *)arg;
902 scmd->scsi_done(scmd);
905 /* XXX: for spindown warning */
906 static void ata_delayed_done(struct scsi_cmnd *scmd)
908 static struct timer_list timer;
910 setup_timer(&timer, ata_delayed_done_timerfn, (unsigned long)scmd);
911 mod_timer(&timer, jiffies + 5 * HZ);
915 * ata_scsi_start_stop_xlat - Translate SCSI START STOP UNIT command
916 * @qc: Storage for translated ATA taskfile
918 * Sets up an ATA taskfile to issue STANDBY (to stop) or READ VERIFY
919 * (to start). Perhaps these commands should be preceded by
920 * CHECK POWER MODE to see what power mode the device is already in.
921 * [See SAT revision 5 at www.t10.org]
924 * spin_lock_irqsave(host lock)
927 * Zero on success, non-zero on error.
929 static unsigned int ata_scsi_start_stop_xlat(struct ata_queued_cmd *qc)
931 struct scsi_cmnd *scmd = qc->scsicmd;
932 struct ata_taskfile *tf = &qc->tf;
933 const u8 *cdb = scmd->cmnd;
935 if (scmd->cmd_len < 5)
938 tf->flags |= ATA_TFLAG_DEVICE | ATA_TFLAG_ISADDR;
939 tf->protocol = ATA_PROT_NODATA;
941 ; /* ignore IMMED bit, violates sat-r05 */
944 goto invalid_fld; /* LOEJ bit set not supported */
945 if (((cdb[4] >> 4) & 0xf) != 0)
946 goto invalid_fld; /* power conditions not supported */
948 if (qc->dev->horkage & ATA_HORKAGE_SKIP_PM) {
949 /* the device lacks PM support, finish without doing anything */
950 scmd->result = SAM_STAT_GOOD;
955 tf->nsect = 1; /* 1 sector, lba=0 */
957 if (qc->dev->flags & ATA_DFLAG_LBA) {
958 tf->flags |= ATA_TFLAG_LBA;
963 tf->device |= ATA_LBA;
966 tf->lbal = 0x1; /* sect */
967 tf->lbam = 0x0; /* cyl low */
968 tf->lbah = 0x0; /* cyl high */
971 tf->command = ATA_CMD_VERIFY; /* READ VERIFY */
973 /* XXX: This is for backward compatibility, will be
974 * removed. Read Documentation/feature-removal-schedule.txt
977 if ((qc->dev->flags & ATA_DFLAG_SPUNDOWN) &&
978 (system_state == SYSTEM_HALT ||
979 system_state == SYSTEM_POWER_OFF)) {
980 static unsigned long warned = 0;
982 if (!test_and_set_bit(0, &warned)) {
983 ata_dev_printk(qc->dev, KERN_WARNING,
984 "DISK MIGHT NOT BE SPUN DOWN PROPERLY. "
985 "UPDATE SHUTDOWN UTILITY\n");
986 ata_dev_printk(qc->dev, KERN_WARNING,
987 "For more info, visit "
988 "http://linux-ata.org/shutdown.html\n");
990 /* ->scsi_done is not used, use it for
991 * delayed completion.
993 scmd->scsi_done = qc->scsidone;
994 qc->scsidone = ata_delayed_done;
996 scmd->result = SAM_STAT_GOOD;
1000 /* Issue ATA STANDBY IMMEDIATE command */
1001 tf->command = ATA_CMD_STANDBYNOW1;
1005 * Standby and Idle condition timers could be implemented but that
1006 * would require libata to implement the Power condition mode page
1007 * and allow the user to change it. Changing mode pages requires
1008 * MODE SELECT to be implemented.
1014 ata_scsi_set_sense(scmd, ILLEGAL_REQUEST, 0x24, 0x0);
1015 /* "Invalid field in cbd" */
1021 * ata_scsi_flush_xlat - Translate SCSI SYNCHRONIZE CACHE command
1022 * @qc: Storage for translated ATA taskfile
1024 * Sets up an ATA taskfile to issue FLUSH CACHE or
1028 * spin_lock_irqsave(host lock)
1031 * Zero on success, non-zero on error.
1033 static unsigned int ata_scsi_flush_xlat(struct ata_queued_cmd *qc)
1035 struct ata_taskfile *tf = &qc->tf;
1037 tf->flags |= ATA_TFLAG_DEVICE;
1038 tf->protocol = ATA_PROT_NODATA;
1040 if (qc->dev->flags & ATA_DFLAG_FLUSH_EXT)
1041 tf->command = ATA_CMD_FLUSH_EXT;
1043 tf->command = ATA_CMD_FLUSH;
1049 * scsi_6_lba_len - Get LBA and transfer length
1050 * @cdb: SCSI command to translate
1052 * Calculate LBA and transfer length for 6-byte commands.
1056 * @plen: the transfer length
1058 static void scsi_6_lba_len(const u8 *cdb, u64 *plba, u32 *plen)
1063 VPRINTK("six-byte command\n");
1065 lba |= ((u64)(cdb[1] & 0x1f)) << 16;
1066 lba |= ((u64)cdb[2]) << 8;
1067 lba |= ((u64)cdb[3]);
1076 * scsi_10_lba_len - Get LBA and transfer length
1077 * @cdb: SCSI command to translate
1079 * Calculate LBA and transfer length for 10-byte commands.
1083 * @plen: the transfer length
1085 static void scsi_10_lba_len(const u8 *cdb, u64 *plba, u32 *plen)
1090 VPRINTK("ten-byte command\n");
1092 lba |= ((u64)cdb[2]) << 24;
1093 lba |= ((u64)cdb[3]) << 16;
1094 lba |= ((u64)cdb[4]) << 8;
1095 lba |= ((u64)cdb[5]);
1097 len |= ((u32)cdb[7]) << 8;
1098 len |= ((u32)cdb[8]);
1105 * scsi_16_lba_len - Get LBA and transfer length
1106 * @cdb: SCSI command to translate
1108 * Calculate LBA and transfer length for 16-byte commands.
1112 * @plen: the transfer length
1114 static void scsi_16_lba_len(const u8 *cdb, u64 *plba, u32 *plen)
1119 VPRINTK("sixteen-byte command\n");
1121 lba |= ((u64)cdb[2]) << 56;
1122 lba |= ((u64)cdb[3]) << 48;
1123 lba |= ((u64)cdb[4]) << 40;
1124 lba |= ((u64)cdb[5]) << 32;
1125 lba |= ((u64)cdb[6]) << 24;
1126 lba |= ((u64)cdb[7]) << 16;
1127 lba |= ((u64)cdb[8]) << 8;
1128 lba |= ((u64)cdb[9]);
1130 len |= ((u32)cdb[10]) << 24;
1131 len |= ((u32)cdb[11]) << 16;
1132 len |= ((u32)cdb[12]) << 8;
1133 len |= ((u32)cdb[13]);
1140 * ata_scsi_verify_xlat - Translate SCSI VERIFY command into an ATA one
1141 * @qc: Storage for translated ATA taskfile
1143 * Converts SCSI VERIFY command to an ATA READ VERIFY command.
1146 * spin_lock_irqsave(host lock)
1149 * Zero on success, non-zero on error.
1151 static unsigned int ata_scsi_verify_xlat(struct ata_queued_cmd *qc)
1153 struct scsi_cmnd *scmd = qc->scsicmd;
1154 struct ata_taskfile *tf = &qc->tf;
1155 struct ata_device *dev = qc->dev;
1156 u64 dev_sectors = qc->dev->n_sectors;
1157 const u8 *cdb = scmd->cmnd;
1161 tf->flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
1162 tf->protocol = ATA_PROT_NODATA;
1164 if (cdb[0] == VERIFY) {
1165 if (scmd->cmd_len < 10)
1167 scsi_10_lba_len(cdb, &block, &n_block);
1168 } else if (cdb[0] == VERIFY_16) {
1169 if (scmd->cmd_len < 16)
1171 scsi_16_lba_len(cdb, &block, &n_block);
1177 if (block >= dev_sectors)
1179 if ((block + n_block) > dev_sectors)
1182 if (dev->flags & ATA_DFLAG_LBA) {
1183 tf->flags |= ATA_TFLAG_LBA;
1185 if (lba_28_ok(block, n_block)) {
1187 tf->command = ATA_CMD_VERIFY;
1188 tf->device |= (block >> 24) & 0xf;
1189 } else if (lba_48_ok(block, n_block)) {
1190 if (!(dev->flags & ATA_DFLAG_LBA48))
1194 tf->flags |= ATA_TFLAG_LBA48;
1195 tf->command = ATA_CMD_VERIFY_EXT;
1197 tf->hob_nsect = (n_block >> 8) & 0xff;
1199 tf->hob_lbah = (block >> 40) & 0xff;
1200 tf->hob_lbam = (block >> 32) & 0xff;
1201 tf->hob_lbal = (block >> 24) & 0xff;
1203 /* request too large even for LBA48 */
1206 tf->nsect = n_block & 0xff;
1208 tf->lbah = (block >> 16) & 0xff;
1209 tf->lbam = (block >> 8) & 0xff;
1210 tf->lbal = block & 0xff;
1212 tf->device |= ATA_LBA;
1215 u32 sect, head, cyl, track;
1217 if (!lba_28_ok(block, n_block))
1220 /* Convert LBA to CHS */
1221 track = (u32)block / dev->sectors;
1222 cyl = track / dev->heads;
1223 head = track % dev->heads;
1224 sect = (u32)block % dev->sectors + 1;
1226 DPRINTK("block %u track %u cyl %u head %u sect %u\n",
1227 (u32)block, track, cyl, head, sect);
1229 /* Check whether the converted CHS can fit.
1233 if ((cyl >> 16) || (head >> 4) || (sect >> 8) || (!sect))
1236 tf->command = ATA_CMD_VERIFY;
1237 tf->nsect = n_block & 0xff; /* Sector count 0 means 256 sectors */
1240 tf->lbah = cyl >> 8;
1247 ata_scsi_set_sense(scmd, ILLEGAL_REQUEST, 0x24, 0x0);
1248 /* "Invalid field in cbd" */
1252 ata_scsi_set_sense(scmd, ILLEGAL_REQUEST, 0x21, 0x0);
1253 /* "Logical Block Address out of range" */
1257 scmd->result = SAM_STAT_GOOD;
1262 * ata_scsi_rw_xlat - Translate SCSI r/w command into an ATA one
1263 * @qc: Storage for translated ATA taskfile
1265 * Converts any of six SCSI read/write commands into the
1266 * ATA counterpart, including starting sector (LBA),
1267 * sector count, and taking into account the device's LBA48
1270 * Commands %READ_6, %READ_10, %READ_16, %WRITE_6, %WRITE_10, and
1271 * %WRITE_16 are currently supported.
1274 * spin_lock_irqsave(host lock)
1277 * Zero on success, non-zero on error.
1279 static unsigned int ata_scsi_rw_xlat(struct ata_queued_cmd *qc)
1281 struct scsi_cmnd *scmd = qc->scsicmd;
1282 const u8 *cdb = scmd->cmnd;
1283 unsigned int tf_flags = 0;
1288 if (cdb[0] == WRITE_10 || cdb[0] == WRITE_6 || cdb[0] == WRITE_16)
1289 tf_flags |= ATA_TFLAG_WRITE;
1291 /* Calculate the SCSI LBA, transfer length and FUA. */
1295 if (unlikely(scmd->cmd_len < 10))
1297 scsi_10_lba_len(cdb, &block, &n_block);
1298 if (unlikely(cdb[1] & (1 << 3)))
1299 tf_flags |= ATA_TFLAG_FUA;
1303 if (unlikely(scmd->cmd_len < 6))
1305 scsi_6_lba_len(cdb, &block, &n_block);
1307 /* for 6-byte r/w commands, transfer length 0
1308 * means 256 blocks of data, not 0 block.
1315 if (unlikely(scmd->cmd_len < 16))
1317 scsi_16_lba_len(cdb, &block, &n_block);
1318 if (unlikely(cdb[1] & (1 << 3)))
1319 tf_flags |= ATA_TFLAG_FUA;
1322 DPRINTK("no-byte command\n");
1326 /* Check and compose ATA command */
1328 /* For 10-byte and 16-byte SCSI R/W commands, transfer
1329 * length 0 means transfer 0 block of data.
1330 * However, for ATA R/W commands, sector count 0 means
1331 * 256 or 65536 sectors, not 0 sectors as in SCSI.
1333 * WARNING: one or two older ATA drives treat 0 as 0...
1337 qc->flags |= ATA_QCFLAG_IO;
1338 qc->nbytes = n_block * ATA_SECT_SIZE;
1340 rc = ata_build_rw_tf(&qc->tf, qc->dev, block, n_block, tf_flags,
1342 if (likely(rc == 0))
1347 /* treat all other errors as -EINVAL, fall through */
1349 ata_scsi_set_sense(scmd, ILLEGAL_REQUEST, 0x24, 0x0);
1350 /* "Invalid field in cbd" */
1354 ata_scsi_set_sense(scmd, ILLEGAL_REQUEST, 0x21, 0x0);
1355 /* "Logical Block Address out of range" */
1359 scmd->result = SAM_STAT_GOOD;
1363 static void ata_scsi_qc_complete(struct ata_queued_cmd *qc)
1365 struct ata_port *ap = qc->ap;
1366 struct ata_eh_info *ehi = &qc->dev->link->eh_info;
1367 struct scsi_cmnd *cmd = qc->scsicmd;
1368 u8 *cdb = cmd->cmnd;
1369 int need_sense = (qc->err_mask != 0);
1371 /* We snoop the SET_FEATURES - Write Cache ON/OFF command, and
1372 * schedule EH_REVALIDATE operation to update the IDENTIFY DEVICE
1375 if (ap->ops->error_handler && !need_sense) {
1376 switch (qc->tf.command) {
1377 case ATA_CMD_SET_FEATURES:
1378 if ((qc->tf.feature == SETFEATURES_WC_ON) ||
1379 (qc->tf.feature == SETFEATURES_WC_OFF)) {
1380 ehi->action |= ATA_EH_REVALIDATE;
1381 ata_port_schedule_eh(ap);
1385 case ATA_CMD_INIT_DEV_PARAMS: /* CHS translation changed */
1386 case ATA_CMD_SET_MULTI: /* multi_count changed */
1387 ehi->action |= ATA_EH_REVALIDATE;
1388 ata_port_schedule_eh(ap);
1393 /* For ATA pass thru (SAT) commands, generate a sense block if
1394 * user mandated it or if there's an error. Note that if we
1395 * generate because the user forced us to, a check condition
1396 * is generated and the ATA register values are returned
1397 * whether the command completed successfully or not. If there
1398 * was no error, SK, ASC and ASCQ will all be zero.
1400 if (((cdb[0] == ATA_16) || (cdb[0] == ATA_12)) &&
1401 ((cdb[2] & 0x20) || need_sense)) {
1402 ata_gen_passthru_sense(qc);
1405 cmd->result = SAM_STAT_GOOD;
1407 /* TODO: decide which descriptor format to use
1408 * for 48b LBA devices and call that here
1409 * instead of the fixed desc, which is only
1410 * good for smaller LBA (and maybe CHS?)
1413 ata_gen_ata_sense(qc);
1417 /* XXX: track spindown state for spindown skipping and warning */
1418 if (unlikely(qc->tf.command == ATA_CMD_STANDBY ||
1419 qc->tf.command == ATA_CMD_STANDBYNOW1))
1420 qc->dev->flags |= ATA_DFLAG_SPUNDOWN;
1421 else if (likely(system_state != SYSTEM_HALT &&
1422 system_state != SYSTEM_POWER_OFF))
1423 qc->dev->flags &= ~ATA_DFLAG_SPUNDOWN;
1425 if (need_sense && !ap->ops->error_handler)
1426 ata_dump_status(ap->print_id, &qc->result_tf);
1434 * ata_scsi_translate - Translate then issue SCSI command to ATA device
1435 * @dev: ATA device to which the command is addressed
1436 * @cmd: SCSI command to execute
1437 * @done: SCSI command completion function
1438 * @xlat_func: Actor which translates @cmd to an ATA taskfile
1440 * Our ->queuecommand() function has decided that the SCSI
1441 * command issued can be directly translated into an ATA
1442 * command, rather than handled internally.
1444 * This function sets up an ata_queued_cmd structure for the
1445 * SCSI command, and sends that ata_queued_cmd to the hardware.
1447 * The xlat_func argument (actor) returns 0 if ready to execute
1448 * ATA command, else 1 to finish translation. If 1 is returned
1449 * then cmd->result (and possibly cmd->sense_buffer) are assumed
1450 * to be set reflecting an error condition or clean (early)
1454 * spin_lock_irqsave(host lock)
1457 * 0 on success, SCSI_ML_QUEUE_DEVICE_BUSY if the command
1458 * needs to be deferred.
1460 static int ata_scsi_translate(struct ata_device *dev, struct scsi_cmnd *cmd,
1461 void (*done)(struct scsi_cmnd *),
1462 ata_xlat_func_t xlat_func)
1464 struct ata_port *ap = dev->link->ap;
1465 struct ata_queued_cmd *qc;
1470 qc = ata_scsi_qc_new(dev, cmd, done);
1474 /* data is present; dma-map it */
1475 if (cmd->sc_data_direction == DMA_FROM_DEVICE ||
1476 cmd->sc_data_direction == DMA_TO_DEVICE) {
1477 if (unlikely(scsi_bufflen(cmd) < 1)) {
1478 ata_dev_printk(dev, KERN_WARNING,
1479 "WARNING: zero len r/w req\n");
1483 ata_sg_init(qc, scsi_sglist(cmd), scsi_sg_count(cmd));
1485 qc->dma_dir = cmd->sc_data_direction;
1488 qc->complete_fn = ata_scsi_qc_complete;
1493 if (ap->ops->qc_defer) {
1494 if ((rc = ap->ops->qc_defer(qc)))
1498 /* select device, send command to hardware */
1507 DPRINTK("EXIT - early finish (good or error)\n");
1512 cmd->result = (DID_ERROR << 16);
1515 DPRINTK("EXIT - internal\n");
1520 DPRINTK("EXIT - defer\n");
1521 if (rc == ATA_DEFER_LINK)
1522 return SCSI_MLQUEUE_DEVICE_BUSY;
1524 return SCSI_MLQUEUE_HOST_BUSY;
1528 * ata_scsi_rbuf_get - Map response buffer.
1529 * @cmd: SCSI command containing buffer to be mapped.
1530 * @buf_out: Pointer to mapped area.
1532 * Maps buffer contained within SCSI command @cmd.
1535 * spin_lock_irqsave(host lock)
1538 * Length of response buffer.
1541 static unsigned int ata_scsi_rbuf_get(struct scsi_cmnd *cmd, u8 **buf_out)
1544 unsigned int buflen;
1546 struct scatterlist *sg = scsi_sglist(cmd);
1549 buf = kmap_atomic(sg->page, KM_IRQ0) + sg->offset;
1550 buflen = sg->length;
1561 * ata_scsi_rbuf_put - Unmap response buffer.
1562 * @cmd: SCSI command containing buffer to be unmapped.
1563 * @buf: buffer to unmap
1565 * Unmaps response buffer contained within @cmd.
1568 * spin_lock_irqsave(host lock)
1571 static inline void ata_scsi_rbuf_put(struct scsi_cmnd *cmd, u8 *buf)
1573 struct scatterlist *sg = scsi_sglist(cmd);
1575 kunmap_atomic(buf - sg->offset, KM_IRQ0);
1579 * ata_scsi_rbuf_fill - wrapper for SCSI command simulators
1580 * @args: device IDENTIFY data / SCSI command of interest.
1581 * @actor: Callback hook for desired SCSI command simulator
1583 * Takes care of the hard work of simulating a SCSI command...
1584 * Mapping the response buffer, calling the command's handler,
1585 * and handling the handler's return value. This return value
1586 * indicates whether the handler wishes the SCSI command to be
1587 * completed successfully (0), or not (in which case cmd->result
1588 * and sense buffer are assumed to be set).
1591 * spin_lock_irqsave(host lock)
1594 void ata_scsi_rbuf_fill(struct ata_scsi_args *args,
1595 unsigned int (*actor) (struct ata_scsi_args *args,
1596 u8 *rbuf, unsigned int buflen))
1599 unsigned int buflen, rc;
1600 struct scsi_cmnd *cmd = args->cmd;
1602 buflen = ata_scsi_rbuf_get(cmd, &rbuf);
1603 memset(rbuf, 0, buflen);
1604 rc = actor(args, rbuf, buflen);
1605 ata_scsi_rbuf_put(cmd, rbuf);
1608 cmd->result = SAM_STAT_GOOD;
1613 * ATA_SCSI_RBUF_SET - helper to set values in SCSI response buffer
1614 * @idx: byte index into SCSI response buffer
1615 * @val: value to set
1617 * To be used by SCSI command simulator functions. This macros
1618 * expects two local variables, u8 *rbuf and unsigned int buflen,
1624 #define ATA_SCSI_RBUF_SET(idx, val) do { \
1625 if ((idx) < buflen) rbuf[(idx)] = (u8)(val); \
1629 * ata_scsiop_inq_std - Simulate INQUIRY command
1630 * @args: device IDENTIFY data / SCSI command of interest.
1631 * @rbuf: Response buffer, to which simulated SCSI cmd output is sent.
1632 * @buflen: Response buffer length.
1634 * Returns standard device identification data associated
1635 * with non-VPD INQUIRY command output.
1638 * spin_lock_irqsave(host lock)
1641 unsigned int ata_scsiop_inq_std(struct ata_scsi_args *args, u8 *rbuf,
1642 unsigned int buflen)
1647 0x5, /* claim SPC-3 version compatibility */
1652 /* set scsi removeable (RMB) bit per ata bit */
1653 if (ata_id_removeable(args->id))
1658 memcpy(rbuf, hdr, sizeof(hdr));
1661 memcpy(&rbuf[8], "ATA ", 8);
1662 ata_id_string(args->id, &rbuf[16], ATA_ID_PROD, 16);
1663 ata_id_string(args->id, &rbuf[32], ATA_ID_FW_REV, 4);
1664 if (rbuf[32] == 0 || rbuf[32] == ' ')
1665 memcpy(&rbuf[32], "n/a ", 4);
1669 const u8 versions[] = {
1670 0x60, /* SAM-3 (no version claimed) */
1673 0x20, /* SBC-2 (no version claimed) */
1676 0x60 /* SPC-3 (no version claimed) */
1679 memcpy(rbuf + 59, versions, sizeof(versions));
1686 * ata_scsiop_inq_00 - Simulate INQUIRY VPD page 0, list of pages
1687 * @args: device IDENTIFY data / SCSI command of interest.
1688 * @rbuf: Response buffer, to which simulated SCSI cmd output is sent.
1689 * @buflen: Response buffer length.
1691 * Returns list of inquiry VPD pages available.
1694 * spin_lock_irqsave(host lock)
1697 unsigned int ata_scsiop_inq_00(struct ata_scsi_args *args, u8 *rbuf,
1698 unsigned int buflen)
1700 const u8 pages[] = {
1701 0x00, /* page 0x00, this page */
1702 0x80, /* page 0x80, unit serial no page */
1703 0x83 /* page 0x83, device ident page */
1705 rbuf[3] = sizeof(pages); /* number of supported VPD pages */
1708 memcpy(rbuf + 4, pages, sizeof(pages));
1714 * ata_scsiop_inq_80 - Simulate INQUIRY VPD page 80, device serial number
1715 * @args: device IDENTIFY data / SCSI command of interest.
1716 * @rbuf: Response buffer, to which simulated SCSI cmd output is sent.
1717 * @buflen: Response buffer length.
1719 * Returns ATA device serial number.
1722 * spin_lock_irqsave(host lock)
1725 unsigned int ata_scsiop_inq_80(struct ata_scsi_args *args, u8 *rbuf,
1726 unsigned int buflen)
1730 0x80, /* this page code */
1732 ATA_ID_SERNO_LEN, /* page len */
1734 memcpy(rbuf, hdr, sizeof(hdr));
1736 if (buflen > (ATA_ID_SERNO_LEN + 4 - 1))
1737 ata_id_string(args->id, (unsigned char *) &rbuf[4],
1738 ATA_ID_SERNO, ATA_ID_SERNO_LEN);
1744 * ata_scsiop_inq_83 - Simulate INQUIRY VPD page 83, device identity
1745 * @args: device IDENTIFY data / SCSI command of interest.
1746 * @rbuf: Response buffer, to which simulated SCSI cmd output is sent.
1747 * @buflen: Response buffer length.
1749 * Yields two logical unit device identification designators:
1750 * - vendor specific ASCII containing the ATA serial number
1751 * - SAT defined "t10 vendor id based" containing ASCII vendor
1752 * name ("ATA "), model and serial numbers.
1755 * spin_lock_irqsave(host lock)
1758 unsigned int ata_scsiop_inq_83(struct ata_scsi_args *args, u8 *rbuf,
1759 unsigned int buflen)
1762 const int sat_model_serial_desc_len = 68;
1764 rbuf[1] = 0x83; /* this page code */
1767 if (buflen > (ATA_ID_SERNO_LEN + num + 3)) {
1768 /* piv=0, assoc=lu, code_set=ACSII, designator=vendor */
1770 rbuf[num + 3] = ATA_ID_SERNO_LEN;
1772 ata_id_string(args->id, (unsigned char *) rbuf + num,
1773 ATA_ID_SERNO, ATA_ID_SERNO_LEN);
1774 num += ATA_ID_SERNO_LEN;
1776 if (buflen > (sat_model_serial_desc_len + num + 3)) {
1777 /* SAT defined lu model and serial numbers descriptor */
1778 /* piv=0, assoc=lu, code_set=ACSII, designator=t10 vendor id */
1781 rbuf[num + 3] = sat_model_serial_desc_len;
1783 memcpy(rbuf + num, "ATA ", 8);
1785 ata_id_string(args->id, (unsigned char *) rbuf + num,
1786 ATA_ID_PROD, ATA_ID_PROD_LEN);
1787 num += ATA_ID_PROD_LEN;
1788 ata_id_string(args->id, (unsigned char *) rbuf + num,
1789 ATA_ID_SERNO, ATA_ID_SERNO_LEN);
1790 num += ATA_ID_SERNO_LEN;
1792 rbuf[3] = num - 4; /* page len (assume less than 256 bytes) */
1797 * ata_scsiop_inq_89 - Simulate INQUIRY VPD page 89, ATA info
1798 * @args: device IDENTIFY data / SCSI command of interest.
1799 * @rbuf: Response buffer, to which simulated SCSI cmd output is sent.
1800 * @buflen: Response buffer length.
1802 * Yields SAT-specified ATA VPD page.
1805 * spin_lock_irqsave(host lock)
1808 unsigned int ata_scsiop_inq_89(struct ata_scsi_args *args, u8 *rbuf,
1809 unsigned int buflen)
1812 struct ata_taskfile tf;
1818 memset(&pbuf, 0, sizeof(pbuf));
1819 memset(&tf, 0, sizeof(tf));
1821 pbuf[1] = 0x89; /* our page code */
1822 pbuf[2] = (0x238 >> 8); /* page size fixed at 238h */
1823 pbuf[3] = (0x238 & 0xff);
1825 memcpy(&pbuf[8], "linux ", 8);
1826 memcpy(&pbuf[16], "libata ", 16);
1827 memcpy(&pbuf[32], DRV_VERSION, 4);
1828 ata_id_string(args->id, &pbuf[32], ATA_ID_FW_REV, 4);
1830 /* we don't store the ATA device signature, so we fake it */
1832 tf.command = ATA_DRDY; /* really, this is Status reg */
1836 ata_tf_to_fis(&tf, 0, 1, &pbuf[36]); /* TODO: PMP? */
1837 pbuf[36] = 0x34; /* force D2H Reg FIS (34h) */
1839 pbuf[56] = ATA_CMD_ID_ATA;
1841 i = min(buflen, 60U);
1842 memcpy(rbuf, &pbuf[0], i);
1848 memcpy(&rbuf[60], &args->id[0], min(buflen, 512U));
1853 * ata_scsiop_noop - Command handler that simply returns success.
1854 * @args: device IDENTIFY data / SCSI command of interest.
1855 * @rbuf: Response buffer, to which simulated SCSI cmd output is sent.
1856 * @buflen: Response buffer length.
1858 * No operation. Simply returns success to caller, to indicate
1859 * that the caller should successfully complete this SCSI command.
1862 * spin_lock_irqsave(host lock)
1865 unsigned int ata_scsiop_noop(struct ata_scsi_args *args, u8 *rbuf,
1866 unsigned int buflen)
1873 * ata_msense_push - Push data onto MODE SENSE data output buffer
1874 * @ptr_io: (input/output) Location to store more output data
1875 * @last: End of output data buffer
1876 * @buf: Pointer to BLOB being added to output buffer
1877 * @buflen: Length of BLOB
1879 * Store MODE SENSE data on an output buffer.
1885 static void ata_msense_push(u8 **ptr_io, const u8 *last,
1886 const u8 *buf, unsigned int buflen)
1890 if ((ptr + buflen - 1) > last)
1893 memcpy(ptr, buf, buflen);
1901 * ata_msense_caching - Simulate MODE SENSE caching info page
1902 * @id: device IDENTIFY data
1903 * @ptr_io: (input/output) Location to store more output data
1904 * @last: End of output data buffer
1906 * Generate a caching info page, which conditionally indicates
1907 * write caching to the SCSI layer, depending on device
1914 static unsigned int ata_msense_caching(u16 *id, u8 **ptr_io,
1917 u8 page[CACHE_MPAGE_LEN];
1919 memcpy(page, def_cache_mpage, sizeof(page));
1920 if (ata_id_wcache_enabled(id))
1921 page[2] |= (1 << 2); /* write cache enable */
1922 if (!ata_id_rahead_enabled(id))
1923 page[12] |= (1 << 5); /* disable read ahead */
1925 ata_msense_push(ptr_io, last, page, sizeof(page));
1926 return sizeof(page);
1930 * ata_msense_ctl_mode - Simulate MODE SENSE control mode page
1931 * @dev: Device associated with this MODE SENSE command
1932 * @ptr_io: (input/output) Location to store more output data
1933 * @last: End of output data buffer
1935 * Generate a generic MODE SENSE control mode page.
1941 static unsigned int ata_msense_ctl_mode(u8 **ptr_io, const u8 *last)
1943 ata_msense_push(ptr_io, last, def_control_mpage,
1944 sizeof(def_control_mpage));
1945 return sizeof(def_control_mpage);
1949 * ata_msense_rw_recovery - Simulate MODE SENSE r/w error recovery page
1950 * @dev: Device associated with this MODE SENSE command
1951 * @ptr_io: (input/output) Location to store more output data
1952 * @last: End of output data buffer
1954 * Generate a generic MODE SENSE r/w error recovery page.
1960 static unsigned int ata_msense_rw_recovery(u8 **ptr_io, const u8 *last)
1963 ata_msense_push(ptr_io, last, def_rw_recovery_mpage,
1964 sizeof(def_rw_recovery_mpage));
1965 return sizeof(def_rw_recovery_mpage);
1969 * We can turn this into a real blacklist if it's needed, for now just
1970 * blacklist any Maxtor BANC1G10 revision firmware
1972 static int ata_dev_supports_fua(u16 *id)
1974 unsigned char model[ATA_ID_PROD_LEN + 1], fw[ATA_ID_FW_REV_LEN + 1];
1978 if (!ata_id_has_fua(id))
1981 ata_id_c_string(id, model, ATA_ID_PROD, sizeof(model));
1982 ata_id_c_string(id, fw, ATA_ID_FW_REV, sizeof(fw));
1984 if (strcmp(model, "Maxtor"))
1986 if (strcmp(fw, "BANC1G10"))
1989 return 0; /* blacklisted */
1993 * ata_scsiop_mode_sense - Simulate MODE SENSE 6, 10 commands
1994 * @args: device IDENTIFY data / SCSI command of interest.
1995 * @rbuf: Response buffer, to which simulated SCSI cmd output is sent.
1996 * @buflen: Response buffer length.
1998 * Simulate MODE SENSE commands. Assume this is invoked for direct
1999 * access devices (e.g. disks) only. There should be no block
2000 * descriptor for other device types.
2003 * spin_lock_irqsave(host lock)
2006 unsigned int ata_scsiop_mode_sense(struct ata_scsi_args *args, u8 *rbuf,
2007 unsigned int buflen)
2009 struct ata_device *dev = args->dev;
2010 u8 *scsicmd = args->cmd->cmnd, *p, *last;
2011 const u8 sat_blk_desc[] = {
2012 0, 0, 0, 0, /* number of blocks: sat unspecified */
2014 0, 0x2, 0x0 /* block length: 512 bytes */
2017 unsigned int ebd, page_control, six_byte, output_len, alloc_len, minlen;
2022 six_byte = (scsicmd[0] == MODE_SENSE);
2023 ebd = !(scsicmd[1] & 0x8); /* dbd bit inverted == edb */
2025 * LLBA bit in msense(10) ignored (compliant)
2028 page_control = scsicmd[2] >> 6;
2029 switch (page_control) {
2030 case 0: /* current */
2031 break; /* supported */
2033 goto saving_not_supp;
2034 case 1: /* changeable */
2035 case 2: /* defaults */
2041 output_len = 4 + (ebd ? 8 : 0);
2042 alloc_len = scsicmd[4];
2044 output_len = 8 + (ebd ? 8 : 0);
2045 alloc_len = (scsicmd[7] << 8) + scsicmd[8];
2047 minlen = (alloc_len < buflen) ? alloc_len : buflen;
2049 p = rbuf + output_len;
2050 last = rbuf + minlen - 1;
2052 pg = scsicmd[2] & 0x3f;
2055 * No mode subpages supported (yet) but asking for _all_
2056 * subpages may be valid
2058 if (spg && (spg != ALL_SUB_MPAGES))
2062 case RW_RECOVERY_MPAGE:
2063 output_len += ata_msense_rw_recovery(&p, last);
2067 output_len += ata_msense_caching(args->id, &p, last);
2070 case CONTROL_MPAGE: {
2071 output_len += ata_msense_ctl_mode(&p, last);
2076 output_len += ata_msense_rw_recovery(&p, last);
2077 output_len += ata_msense_caching(args->id, &p, last);
2078 output_len += ata_msense_ctl_mode(&p, last);
2081 default: /* invalid page code */
2089 if (ata_dev_supports_fua(args->id) && (dev->flags & ATA_DFLAG_LBA48) &&
2090 (!(dev->flags & ATA_DFLAG_PIO) || dev->multi_count))
2095 rbuf[0] = output_len;
2100 rbuf[3] = sizeof(sat_blk_desc);
2102 memcpy(rbuf + 4, sat_blk_desc,
2103 sizeof(sat_blk_desc));
2107 rbuf[0] = output_len >> 8;
2109 rbuf[1] = output_len;
2114 rbuf[7] = sizeof(sat_blk_desc);
2116 memcpy(rbuf + 8, sat_blk_desc,
2117 sizeof(sat_blk_desc));
2123 ata_scsi_set_sense(args->cmd, ILLEGAL_REQUEST, 0x24, 0x0);
2124 /* "Invalid field in cbd" */
2128 ata_scsi_set_sense(args->cmd, ILLEGAL_REQUEST, 0x39, 0x0);
2129 /* "Saving parameters not supported" */
2134 * ata_scsiop_read_cap - Simulate READ CAPACITY[ 16] commands
2135 * @args: device IDENTIFY data / SCSI command of interest.
2136 * @rbuf: Response buffer, to which simulated SCSI cmd output is sent.
2137 * @buflen: Response buffer length.
2139 * Simulate READ CAPACITY commands.
2144 unsigned int ata_scsiop_read_cap(struct ata_scsi_args *args, u8 *rbuf,
2145 unsigned int buflen)
2147 u64 last_lba = args->dev->n_sectors - 1; /* LBA of the last block */
2151 if (args->cmd->cmnd[0] == READ_CAPACITY) {
2152 if (last_lba >= 0xffffffffULL)
2153 last_lba = 0xffffffff;
2155 /* sector count, 32-bit */
2156 ATA_SCSI_RBUF_SET(0, last_lba >> (8 * 3));
2157 ATA_SCSI_RBUF_SET(1, last_lba >> (8 * 2));
2158 ATA_SCSI_RBUF_SET(2, last_lba >> (8 * 1));
2159 ATA_SCSI_RBUF_SET(3, last_lba);
2162 ATA_SCSI_RBUF_SET(6, ATA_SECT_SIZE >> 8);
2163 ATA_SCSI_RBUF_SET(7, ATA_SECT_SIZE);
2165 /* sector count, 64-bit */
2166 ATA_SCSI_RBUF_SET(0, last_lba >> (8 * 7));
2167 ATA_SCSI_RBUF_SET(1, last_lba >> (8 * 6));
2168 ATA_SCSI_RBUF_SET(2, last_lba >> (8 * 5));
2169 ATA_SCSI_RBUF_SET(3, last_lba >> (8 * 4));
2170 ATA_SCSI_RBUF_SET(4, last_lba >> (8 * 3));
2171 ATA_SCSI_RBUF_SET(5, last_lba >> (8 * 2));
2172 ATA_SCSI_RBUF_SET(6, last_lba >> (8 * 1));
2173 ATA_SCSI_RBUF_SET(7, last_lba);
2176 ATA_SCSI_RBUF_SET(10, ATA_SECT_SIZE >> 8);
2177 ATA_SCSI_RBUF_SET(11, ATA_SECT_SIZE);
2184 * ata_scsiop_report_luns - Simulate REPORT LUNS command
2185 * @args: device IDENTIFY data / SCSI command of interest.
2186 * @rbuf: Response buffer, to which simulated SCSI cmd output is sent.
2187 * @buflen: Response buffer length.
2189 * Simulate REPORT LUNS command.
2192 * spin_lock_irqsave(host lock)
2195 unsigned int ata_scsiop_report_luns(struct ata_scsi_args *args, u8 *rbuf,
2196 unsigned int buflen)
2199 rbuf[3] = 8; /* just one lun, LUN 0, size 8 bytes */
2205 * ata_scsi_set_sense - Set SCSI sense data and status
2206 * @cmd: SCSI request to be handled
2207 * @sk: SCSI-defined sense key
2208 * @asc: SCSI-defined additional sense code
2209 * @ascq: SCSI-defined additional sense code qualifier
2211 * Helper function that builds a valid fixed format, current
2212 * response code and the given sense key (sk), additional sense
2213 * code (asc) and additional sense code qualifier (ascq) with
2214 * a SCSI command status of %SAM_STAT_CHECK_CONDITION and
2215 * DRIVER_SENSE set in the upper bits of scsi_cmnd::result .
2221 void ata_scsi_set_sense(struct scsi_cmnd *cmd, u8 sk, u8 asc, u8 ascq)
2223 cmd->result = (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION;
2225 cmd->sense_buffer[0] = 0x70; /* fixed format, current */
2226 cmd->sense_buffer[2] = sk;
2227 cmd->sense_buffer[7] = 18 - 8; /* additional sense length */
2228 cmd->sense_buffer[12] = asc;
2229 cmd->sense_buffer[13] = ascq;
2233 * ata_scsi_badcmd - End a SCSI request with an error
2234 * @cmd: SCSI request to be handled
2235 * @done: SCSI command completion function
2236 * @asc: SCSI-defined additional sense code
2237 * @ascq: SCSI-defined additional sense code qualifier
2239 * Helper function that completes a SCSI command with
2240 * %SAM_STAT_CHECK_CONDITION, with a sense key %ILLEGAL_REQUEST
2241 * and the specified additional sense codes.
2244 * spin_lock_irqsave(host lock)
2247 void ata_scsi_badcmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *), u8 asc, u8 ascq)
2250 ata_scsi_set_sense(cmd, ILLEGAL_REQUEST, asc, ascq);
2255 static void atapi_sense_complete(struct ata_queued_cmd *qc)
2257 if (qc->err_mask && ((qc->err_mask & AC_ERR_DEV) == 0)) {
2258 /* FIXME: not quite right; we don't want the
2259 * translation of taskfile registers into
2260 * a sense descriptors, since that's only
2261 * correct for ATA, not ATAPI
2263 ata_gen_passthru_sense(qc);
2266 qc->scsidone(qc->scsicmd);
2270 /* is it pointless to prefer PIO for "safety reasons"? */
2271 static inline int ata_pio_use_silly(struct ata_port *ap)
2273 return (ap->flags & ATA_FLAG_PIO_DMA);
2276 static void atapi_request_sense(struct ata_queued_cmd *qc)
2278 struct ata_port *ap = qc->ap;
2279 struct scsi_cmnd *cmd = qc->scsicmd;
2281 DPRINTK("ATAPI request sense\n");
2283 /* FIXME: is this needed? */
2284 memset(cmd->sense_buffer, 0, sizeof(cmd->sense_buffer));
2286 ap->ops->tf_read(ap, &qc->tf);
2288 /* fill these in, for the case where they are -not- overwritten */
2289 cmd->sense_buffer[0] = 0x70;
2290 cmd->sense_buffer[2] = qc->tf.feature >> 4;
2294 ata_sg_init_one(qc, cmd->sense_buffer, sizeof(cmd->sense_buffer));
2295 qc->dma_dir = DMA_FROM_DEVICE;
2297 memset(&qc->cdb, 0, qc->dev->cdb_len);
2298 qc->cdb[0] = REQUEST_SENSE;
2299 qc->cdb[4] = SCSI_SENSE_BUFFERSIZE;
2301 qc->tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
2302 qc->tf.command = ATA_CMD_PACKET;
2304 if (ata_pio_use_silly(ap)) {
2305 qc->tf.protocol = ATA_PROT_ATAPI_DMA;
2306 qc->tf.feature |= ATAPI_PKT_DMA;
2308 qc->tf.protocol = ATA_PROT_ATAPI;
2309 qc->tf.lbam = SCSI_SENSE_BUFFERSIZE;
2312 qc->nbytes = SCSI_SENSE_BUFFERSIZE;
2314 qc->complete_fn = atapi_sense_complete;
2321 static void atapi_qc_complete(struct ata_queued_cmd *qc)
2323 struct scsi_cmnd *cmd = qc->scsicmd;
2324 unsigned int err_mask = qc->err_mask;
2326 VPRINTK("ENTER, err_mask 0x%X\n", err_mask);
2328 /* handle completion from new EH */
2329 if (unlikely(qc->ap->ops->error_handler &&
2330 (err_mask || qc->flags & ATA_QCFLAG_SENSE_VALID))) {
2332 if (!(qc->flags & ATA_QCFLAG_SENSE_VALID)) {
2333 /* FIXME: not quite right; we don't want the
2334 * translation of taskfile registers into a
2335 * sense descriptors, since that's only
2336 * correct for ATA, not ATAPI
2338 ata_gen_passthru_sense(qc);
2341 /* SCSI EH automatically locks door if sdev->locked is
2342 * set. Sometimes door lock request continues to
2343 * fail, for example, when no media is present. This
2344 * creates a loop - SCSI EH issues door lock which
2345 * fails and gets invoked again to acquire sense data
2346 * for the failed command.
2348 * If door lock fails, always clear sdev->locked to
2349 * avoid this infinite loop.
2351 if (qc->cdb[0] == ALLOW_MEDIUM_REMOVAL)
2352 qc->dev->sdev->locked = 0;
2354 qc->scsicmd->result = SAM_STAT_CHECK_CONDITION;
2360 /* successful completion or old EH failure path */
2361 if (unlikely(err_mask & AC_ERR_DEV)) {
2362 cmd->result = SAM_STAT_CHECK_CONDITION;
2363 atapi_request_sense(qc);
2365 } else if (unlikely(err_mask)) {
2366 /* FIXME: not quite right; we don't want the
2367 * translation of taskfile registers into
2368 * a sense descriptors, since that's only
2369 * correct for ATA, not ATAPI
2371 ata_gen_passthru_sense(qc);
2373 u8 *scsicmd = cmd->cmnd;
2375 if ((scsicmd[0] == INQUIRY) && ((scsicmd[1] & 0x03) == 0)) {
2377 unsigned int buflen;
2379 buflen = ata_scsi_rbuf_get(cmd, &buf);
2381 /* ATAPI devices typically report zero for their SCSI version,
2382 * and sometimes deviate from the spec WRT response data
2383 * format. If SCSI version is reported as zero like normal,
2384 * then we make the following fixups: 1) Fake MMC-5 version,
2385 * to indicate to the Linux scsi midlayer this is a modern
2386 * device. 2) Ensure response data format / ATAPI information
2387 * are always correct.
2394 ata_scsi_rbuf_put(cmd, buf);
2397 cmd->result = SAM_STAT_GOOD;
2404 * atapi_xlat - Initialize PACKET taskfile
2405 * @qc: command structure to be initialized
2408 * spin_lock_irqsave(host lock)
2411 * Zero on success, non-zero on failure.
2413 static unsigned int atapi_xlat(struct ata_queued_cmd *qc)
2415 struct scsi_cmnd *scmd = qc->scsicmd;
2416 struct ata_device *dev = qc->dev;
2417 int using_pio = (dev->flags & ATA_DFLAG_PIO);
2418 int nodata = (scmd->sc_data_direction == DMA_NONE);
2419 unsigned int nbytes;
2421 memset(qc->cdb, 0, dev->cdb_len);
2422 memcpy(qc->cdb, scmd->cmnd, scmd->cmd_len);
2424 qc->complete_fn = atapi_qc_complete;
2426 qc->tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
2427 if (scmd->sc_data_direction == DMA_TO_DEVICE) {
2428 qc->tf.flags |= ATA_TFLAG_WRITE;
2429 DPRINTK("direction: write\n");
2432 qc->tf.command = ATA_CMD_PACKET;
2433 qc->nbytes = scsi_bufflen(scmd);
2435 /* check whether ATAPI DMA is safe */
2436 if (!using_pio && ata_check_atapi_dma(qc))
2439 /* Some controller variants snoop this value for Packet transfers
2440 to do state machine and FIFO management. Thus we want to set it
2441 properly, and for DMA where it is effectively meaningless */
2442 nbytes = min(qc->nbytes, (unsigned int)63 * 1024);
2444 qc->tf.lbam = (nbytes & 0xFF);
2445 qc->tf.lbah = (nbytes >> 8);
2447 if (using_pio || nodata) {
2448 /* no data, or PIO data xfer */
2450 qc->tf.protocol = ATA_PROT_ATAPI_NODATA;
2452 qc->tf.protocol = ATA_PROT_ATAPI;
2455 qc->tf.protocol = ATA_PROT_ATAPI_DMA;
2456 qc->tf.feature |= ATAPI_PKT_DMA;
2458 if (atapi_dmadir && (scmd->sc_data_direction != DMA_TO_DEVICE))
2459 /* some SATA bridges need us to indicate data xfer direction */
2460 qc->tf.feature |= ATAPI_DMADIR;
2464 /* FIXME: We need to translate 0x05 READ_BLOCK_LIMITS to a MODE_SENSE
2465 as ATAPI tape drives don't get this right otherwise */
2469 static struct ata_device * ata_find_dev(struct ata_port *ap, int devno)
2471 if (ap->nr_pmp_links == 0) {
2472 if (likely(devno < ata_link_max_devices(&ap->link)))
2473 return &ap->link.device[devno];
2475 if (likely(devno < ap->nr_pmp_links))
2476 return &ap->pmp_link[devno].device[0];
2482 static struct ata_device * __ata_scsi_find_dev(struct ata_port *ap,
2483 const struct scsi_device *scsidev)
2487 /* skip commands not addressed to targets we simulate */
2488 if (ap->nr_pmp_links == 0) {
2489 if (unlikely(scsidev->channel || scsidev->lun))
2491 devno = scsidev->id;
2493 if (unlikely(scsidev->id || scsidev->lun))
2495 devno = scsidev->channel;
2498 return ata_find_dev(ap, devno);
2502 * ata_scsi_dev_enabled - determine if device is enabled
2505 * Determine if commands should be sent to the specified device.
2508 * spin_lock_irqsave(host lock)
2511 * 0 if commands are not allowed / 1 if commands are allowed
2514 static int ata_scsi_dev_enabled(struct ata_device *dev)
2516 if (unlikely(!ata_dev_enabled(dev)))
2519 if (!atapi_enabled || (dev->link->ap->flags & ATA_FLAG_NO_ATAPI)) {
2520 if (unlikely(dev->class == ATA_DEV_ATAPI)) {
2521 ata_dev_printk(dev, KERN_WARNING,
2522 "WARNING: ATAPI is %s, device ignored.\n",
2523 atapi_enabled ? "not supported with this driver" : "disabled");
2532 * ata_scsi_find_dev - lookup ata_device from scsi_cmnd
2533 * @ap: ATA port to which the device is attached
2534 * @scsidev: SCSI device from which we derive the ATA device
2536 * Given various information provided in struct scsi_cmnd,
2537 * map that onto an ATA bus, and using that mapping
2538 * determine which ata_device is associated with the
2539 * SCSI command to be sent.
2542 * spin_lock_irqsave(host lock)
2545 * Associated ATA device, or %NULL if not found.
2547 static struct ata_device *
2548 ata_scsi_find_dev(struct ata_port *ap, const struct scsi_device *scsidev)
2550 struct ata_device *dev = __ata_scsi_find_dev(ap, scsidev);
2552 if (unlikely(!dev || !ata_scsi_dev_enabled(dev)))
2559 * ata_scsi_map_proto - Map pass-thru protocol value to taskfile value.
2560 * @byte1: Byte 1 from pass-thru CDB.
2563 * ATA_PROT_UNKNOWN if mapping failed/unimplemented, protocol otherwise.
2566 ata_scsi_map_proto(u8 byte1)
2568 switch((byte1 & 0x1e) >> 1) {
2569 case 3: /* Non-data */
2570 return ATA_PROT_NODATA;
2573 case 10: /* UDMA Data-in */
2574 case 11: /* UDMA Data-Out */
2575 return ATA_PROT_DMA;
2577 case 4: /* PIO Data-in */
2578 case 5: /* PIO Data-out */
2579 return ATA_PROT_PIO;
2581 case 0: /* Hard Reset */
2583 case 8: /* Device Diagnostic */
2584 case 9: /* Device Reset */
2585 case 7: /* DMA Queued */
2586 case 12: /* FPDMA */
2587 case 15: /* Return Response Info */
2588 default: /* Reserved */
2592 return ATA_PROT_UNKNOWN;
2596 * ata_scsi_pass_thru - convert ATA pass-thru CDB to taskfile
2597 * @qc: command structure to be initialized
2599 * Handles either 12 or 16-byte versions of the CDB.
2602 * Zero on success, non-zero on failure.
2604 static unsigned int ata_scsi_pass_thru(struct ata_queued_cmd *qc)
2606 struct ata_taskfile *tf = &(qc->tf);
2607 struct scsi_cmnd *scmd = qc->scsicmd;
2608 struct ata_device *dev = qc->dev;
2609 const u8 *cdb = scmd->cmnd;
2611 if ((tf->protocol = ata_scsi_map_proto(cdb[1])) == ATA_PROT_UNKNOWN)
2614 /* We may not issue DMA commands if no DMA mode is set */
2615 if (tf->protocol == ATA_PROT_DMA && dev->dma_mode == 0)
2619 * 12 and 16 byte CDBs use different offsets to
2620 * provide the various register values.
2622 if (cdb[0] == ATA_16) {
2624 * 16-byte CDB - may contain extended commands.
2626 * If that is the case, copy the upper byte register values.
2628 if (cdb[1] & 0x01) {
2629 tf->hob_feature = cdb[3];
2630 tf->hob_nsect = cdb[5];
2631 tf->hob_lbal = cdb[7];
2632 tf->hob_lbam = cdb[9];
2633 tf->hob_lbah = cdb[11];
2634 tf->flags |= ATA_TFLAG_LBA48;
2636 tf->flags &= ~ATA_TFLAG_LBA48;
2639 * Always copy low byte, device and command registers.
2641 tf->feature = cdb[4];
2646 tf->device = cdb[13];
2647 tf->command = cdb[14];
2650 * 12-byte CDB - incapable of extended commands.
2652 tf->flags &= ~ATA_TFLAG_LBA48;
2654 tf->feature = cdb[3];
2659 tf->device = cdb[8];
2660 tf->command = cdb[9];
2663 /* enforce correct master/slave bit */
2664 tf->device = dev->devno ?
2665 tf->device | ATA_DEV1 : tf->device & ~ATA_DEV1;
2667 /* sanity check for pio multi commands */
2668 if ((cdb[1] & 0xe0) && !is_multi_taskfile(tf))
2671 if (is_multi_taskfile(tf)) {
2672 unsigned int multi_count = 1 << (cdb[1] >> 5);
2674 /* compare the passed through multi_count
2675 * with the cached multi_count of libata
2677 if (multi_count != dev->multi_count)
2678 ata_dev_printk(dev, KERN_WARNING,
2679 "invalid multi_count %u ignored\n",
2683 /* READ/WRITE LONG use a non-standard sect_size */
2684 qc->sect_size = ATA_SECT_SIZE;
2685 switch (tf->command) {
2686 case ATA_CMD_READ_LONG:
2687 case ATA_CMD_READ_LONG_ONCE:
2688 case ATA_CMD_WRITE_LONG:
2689 case ATA_CMD_WRITE_LONG_ONCE:
2690 if (tf->protocol != ATA_PROT_PIO || tf->nsect != 1)
2692 qc->sect_size = scsi_bufflen(scmd);
2696 * Filter SET_FEATURES - XFER MODE command -- otherwise,
2697 * SET_FEATURES - XFER MODE must be preceded/succeeded
2698 * by an update to hardware-specific registers for each
2699 * controller (i.e. the reason for ->set_piomode(),
2700 * ->set_dmamode(), and ->post_set_mode() hooks).
2702 if ((tf->command == ATA_CMD_SET_FEATURES)
2703 && (tf->feature == SETFEATURES_XFER))
2707 * Set flags so that all registers will be written,
2708 * and pass on write indication (used for PIO/DMA
2711 tf->flags |= (ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE);
2713 if (scmd->sc_data_direction == DMA_TO_DEVICE)
2714 tf->flags |= ATA_TFLAG_WRITE;
2717 * Set transfer length.
2719 * TODO: find out if we need to do more here to
2720 * cover scatter/gather case.
2722 qc->nbytes = scsi_bufflen(scmd);
2724 /* request result TF */
2725 qc->flags |= ATA_QCFLAG_RESULT_TF;
2730 ata_scsi_set_sense(scmd, ILLEGAL_REQUEST, 0x24, 0x00);
2731 /* "Invalid field in cdb" */
2736 * ata_get_xlat_func - check if SCSI to ATA translation is possible
2738 * @cmd: SCSI command opcode to consider
2740 * Look up the SCSI command given, and determine whether the
2741 * SCSI command is to be translated or simulated.
2744 * Pointer to translation function if possible, %NULL if not.
2747 static inline ata_xlat_func_t ata_get_xlat_func(struct ata_device *dev, u8 cmd)
2757 return ata_scsi_rw_xlat;
2759 case SYNCHRONIZE_CACHE:
2760 if (ata_try_flush_cache(dev))
2761 return ata_scsi_flush_xlat;
2766 return ata_scsi_verify_xlat;
2770 return ata_scsi_pass_thru;
2773 return ata_scsi_start_stop_xlat;
2780 * ata_scsi_dump_cdb - dump SCSI command contents to dmesg
2781 * @ap: ATA port to which the command was being sent
2782 * @cmd: SCSI command to dump
2784 * Prints the contents of a SCSI command via printk().
2787 static inline void ata_scsi_dump_cdb(struct ata_port *ap,
2788 struct scsi_cmnd *cmd)
2791 struct scsi_device *scsidev = cmd->device;
2792 u8 *scsicmd = cmd->cmnd;
2794 DPRINTK("CDB (%u:%d,%d,%d) %02x %02x %02x %02x %02x %02x %02x %02x %02x\n",
2796 scsidev->channel, scsidev->id, scsidev->lun,
2797 scsicmd[0], scsicmd[1], scsicmd[2], scsicmd[3],
2798 scsicmd[4], scsicmd[5], scsicmd[6], scsicmd[7],
2803 static inline int __ata_scsi_queuecmd(struct scsi_cmnd *scmd,
2804 void (*done)(struct scsi_cmnd *),
2805 struct ata_device *dev)
2807 u8 scsi_op = scmd->cmnd[0];
2808 ata_xlat_func_t xlat_func;
2811 if (dev->class == ATA_DEV_ATA) {
2812 if (unlikely(!scmd->cmd_len || scmd->cmd_len > dev->cdb_len))
2815 xlat_func = ata_get_xlat_func(dev, scsi_op);
2817 if (unlikely(!scmd->cmd_len))
2821 if (likely((scsi_op != ATA_16) || !atapi_passthru16)) {
2822 /* relay SCSI command to ATAPI device */
2823 if (unlikely(scmd->cmd_len > dev->cdb_len))
2826 xlat_func = atapi_xlat;
2828 /* ATA_16 passthru, treat as an ATA command */
2829 if (unlikely(scmd->cmd_len > 16))
2832 xlat_func = ata_get_xlat_func(dev, scsi_op);
2837 rc = ata_scsi_translate(dev, scmd, done, xlat_func);
2839 ata_scsi_simulate(dev, scmd, done);
2844 DPRINTK("bad CDB len=%u, scsi_op=0x%02x, max=%u\n",
2845 scmd->cmd_len, scsi_op, dev->cdb_len);
2846 scmd->result = DID_ERROR << 16;
2852 * ata_scsi_queuecmd - Issue SCSI cdb to libata-managed device
2853 * @cmd: SCSI command to be sent
2854 * @done: Completion function, called when command is complete
2856 * In some cases, this function translates SCSI commands into
2857 * ATA taskfiles, and queues the taskfiles to be sent to
2858 * hardware. In other cases, this function simulates a
2859 * SCSI device by evaluating and responding to certain
2860 * SCSI commands. This creates the overall effect of
2861 * ATA and ATAPI devices appearing as SCSI devices.
2864 * Releases scsi-layer-held lock, and obtains host lock.
2867 * Return value from __ata_scsi_queuecmd() if @cmd can be queued,
2870 int ata_scsi_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *))
2872 struct ata_port *ap;
2873 struct ata_device *dev;
2874 struct scsi_device *scsidev = cmd->device;
2875 struct Scsi_Host *shost = scsidev->host;
2878 ap = ata_shost_to_port(shost);
2880 spin_unlock(shost->host_lock);
2881 spin_lock(ap->lock);
2883 ata_scsi_dump_cdb(ap, cmd);
2885 dev = ata_scsi_find_dev(ap, scsidev);
2887 rc = __ata_scsi_queuecmd(cmd, done, dev);
2889 cmd->result = (DID_BAD_TARGET << 16);
2893 spin_unlock(ap->lock);
2894 spin_lock(shost->host_lock);
2899 * ata_scsi_simulate - simulate SCSI command on ATA device
2900 * @dev: the target device
2901 * @cmd: SCSI command being sent to device.
2902 * @done: SCSI command completion function.
2904 * Interprets and directly executes a select list of SCSI commands
2905 * that can be handled internally.
2908 * spin_lock_irqsave(host lock)
2911 void ata_scsi_simulate(struct ata_device *dev, struct scsi_cmnd *cmd,
2912 void (*done)(struct scsi_cmnd *))
2914 struct ata_scsi_args args;
2915 const u8 *scsicmd = cmd->cmnd;
2923 switch(scsicmd[0]) {
2924 /* TODO: worth improving? */
2926 ata_scsi_invalid_field(cmd, done);
2930 if (scsicmd[1] & 2) /* is CmdDt set? */
2931 ata_scsi_invalid_field(cmd, done);
2932 else if ((scsicmd[1] & 1) == 0) /* is EVPD clear? */
2933 ata_scsi_rbuf_fill(&args, ata_scsiop_inq_std);
2934 else switch (scsicmd[2]) {
2936 ata_scsi_rbuf_fill(&args, ata_scsiop_inq_00);
2939 ata_scsi_rbuf_fill(&args, ata_scsiop_inq_80);
2942 ata_scsi_rbuf_fill(&args, ata_scsiop_inq_83);
2945 ata_scsi_rbuf_fill(&args, ata_scsiop_inq_89);
2948 ata_scsi_invalid_field(cmd, done);
2955 ata_scsi_rbuf_fill(&args, ata_scsiop_mode_sense);
2958 case MODE_SELECT: /* unconditionally return */
2959 case MODE_SELECT_10: /* bad-field-in-cdb */
2960 ata_scsi_invalid_field(cmd, done);
2964 ata_scsi_rbuf_fill(&args, ata_scsiop_read_cap);
2967 case SERVICE_ACTION_IN:
2968 if ((scsicmd[1] & 0x1f) == SAI_READ_CAPACITY_16)
2969 ata_scsi_rbuf_fill(&args, ata_scsiop_read_cap);
2971 ata_scsi_invalid_field(cmd, done);
2975 ata_scsi_rbuf_fill(&args, ata_scsiop_report_luns);
2979 ata_scsi_set_sense(cmd, 0, 0, 0);
2980 cmd->result = (DRIVER_SENSE << 24);
2984 /* if we reach this, then writeback caching is disabled,
2985 * turning this into a no-op.
2987 case SYNCHRONIZE_CACHE:
2990 /* no-op's, complete with success */
2994 case TEST_UNIT_READY:
2995 ata_scsi_rbuf_fill(&args, ata_scsiop_noop);
2998 case SEND_DIAGNOSTIC:
2999 tmp8 = scsicmd[1] & ~(1 << 3);
3000 if ((tmp8 == 0x4) && (!scsicmd[3]) && (!scsicmd[4]))
3001 ata_scsi_rbuf_fill(&args, ata_scsiop_noop);
3003 ata_scsi_invalid_field(cmd, done);
3006 /* all other commands */
3008 ata_scsi_set_sense(cmd, ILLEGAL_REQUEST, 0x20, 0x0);
3009 /* "Invalid command operation code" */
3015 int ata_scsi_add_hosts(struct ata_host *host, struct scsi_host_template *sht)
3019 for (i = 0; i < host->n_ports; i++) {
3020 struct ata_port *ap = host->ports[i];
3021 struct Scsi_Host *shost;
3024 shost = scsi_host_alloc(sht, sizeof(struct ata_port *));
3028 *(struct ata_port **)&shost->hostdata[0] = ap;
3029 ap->scsi_host = shost;
3031 shost->transportt = &ata_scsi_transport_template;
3032 shost->unique_id = ap->print_id;
3035 shost->max_channel = 1;
3036 shost->max_cmd_len = 16;
3038 /* Schedule policy is determined by ->qc_defer()
3039 * callback and it needs to see every deferred qc.
3040 * Set host_blocked to 1 to prevent SCSI midlayer from
3041 * automatically deferring requests.
3043 shost->max_host_blocked = 1;
3045 rc = scsi_add_host(ap->scsi_host, ap->host->dev);
3053 scsi_host_put(host->ports[i]->scsi_host);
3056 struct Scsi_Host *shost = host->ports[i]->scsi_host;
3058 scsi_remove_host(shost);
3059 scsi_host_put(shost);
3064 void ata_scsi_scan_host(struct ata_port *ap, int sync)
3067 struct ata_device *last_failed_dev = NULL;
3068 struct ata_link *link;
3069 struct ata_device *dev;
3071 if (ap->flags & ATA_FLAG_DISABLED)
3075 ata_port_for_each_link(link, ap) {
3076 ata_link_for_each_dev(dev, link) {
3077 struct scsi_device *sdev;
3078 int channel = 0, id = 0;
3080 if (!ata_dev_enabled(dev) || dev->sdev)
3083 if (ata_is_host_link(link))
3086 channel = link->pmp;
3088 sdev = __scsi_add_device(ap->scsi_host, channel, id, 0,
3090 if (!IS_ERR(sdev)) {
3092 scsi_device_put(sdev);
3097 /* If we scanned while EH was in progress or allocation
3098 * failure occurred, scan would have failed silently. Check
3099 * whether all devices are attached.
3101 ata_port_for_each_link(link, ap) {
3102 ata_link_for_each_dev(dev, link) {
3103 if (ata_dev_enabled(dev) && !dev->sdev)
3111 /* we're missing some SCSI devices */
3113 /* If caller requested synchrnous scan && we've made
3114 * any progress, sleep briefly and repeat.
3116 if (dev != last_failed_dev) {
3118 last_failed_dev = dev;
3122 /* We might be failing to detect boot device, give it
3123 * a few more chances.
3130 ata_port_printk(ap, KERN_ERR, "WARNING: synchronous SCSI scan "
3131 "failed without making any progress,\n"
3132 " switching to async\n");
3135 queue_delayed_work(ata_aux_wq, &ap->hotplug_task,
3136 round_jiffies_relative(HZ));
3140 * ata_scsi_offline_dev - offline attached SCSI device
3141 * @dev: ATA device to offline attached SCSI device for
3143 * This function is called from ata_eh_hotplug() and responsible
3144 * for taking the SCSI device attached to @dev offline. This
3145 * function is called with host lock which protects dev->sdev
3149 * spin_lock_irqsave(host lock)
3152 * 1 if attached SCSI device exists, 0 otherwise.
3154 int ata_scsi_offline_dev(struct ata_device *dev)
3157 scsi_device_set_state(dev->sdev, SDEV_OFFLINE);
3164 * ata_scsi_remove_dev - remove attached SCSI device
3165 * @dev: ATA device to remove attached SCSI device for
3167 * This function is called from ata_eh_scsi_hotplug() and
3168 * responsible for removing the SCSI device attached to @dev.
3171 * Kernel thread context (may sleep).
3173 static void ata_scsi_remove_dev(struct ata_device *dev)
3175 struct ata_port *ap = dev->link->ap;
3176 struct scsi_device *sdev;
3177 unsigned long flags;
3179 /* Alas, we need to grab scan_mutex to ensure SCSI device
3180 * state doesn't change underneath us and thus
3181 * scsi_device_get() always succeeds. The mutex locking can
3182 * be removed if there is __scsi_device_get() interface which
3183 * increments reference counts regardless of device state.
3185 mutex_lock(&ap->scsi_host->scan_mutex);
3186 spin_lock_irqsave(ap->lock, flags);
3188 /* clearing dev->sdev is protected by host lock */
3193 /* If user initiated unplug races with us, sdev can go
3194 * away underneath us after the host lock and
3195 * scan_mutex are released. Hold onto it.
3197 if (scsi_device_get(sdev) == 0) {
3198 /* The following ensures the attached sdev is
3199 * offline on return from ata_scsi_offline_dev()
3200 * regardless it wins or loses the race
3201 * against this function.
3203 scsi_device_set_state(sdev, SDEV_OFFLINE);
3210 spin_unlock_irqrestore(ap->lock, flags);
3211 mutex_unlock(&ap->scsi_host->scan_mutex);
3214 ata_dev_printk(dev, KERN_INFO, "detaching (SCSI %s)\n",
3215 sdev->sdev_gendev.bus_id);
3217 scsi_remove_device(sdev);
3218 scsi_device_put(sdev);
3222 static void ata_scsi_handle_link_detach(struct ata_link *link)
3224 struct ata_port *ap = link->ap;
3225 struct ata_device *dev;
3227 ata_link_for_each_dev(dev, link) {
3228 unsigned long flags;
3230 if (!(dev->flags & ATA_DFLAG_DETACHED))
3233 spin_lock_irqsave(ap->lock, flags);
3234 dev->flags &= ~ATA_DFLAG_DETACHED;
3235 spin_unlock_irqrestore(ap->lock, flags);
3237 ata_scsi_remove_dev(dev);
3242 * ata_scsi_media_change_notify - send media change event
3243 * @dev: Pointer to the disk device with media change event
3245 * Tell the block layer to send a media change notification
3249 * spin_lock_irqsave(host lock)
3251 void ata_scsi_media_change_notify(struct ata_device *dev)
3253 #ifdef OTHER_AN_PATCHES_HAVE_BEEN_APPLIED
3255 scsi_device_event_notify(dev->sdev, SDEV_MEDIA_CHANGE);
3260 * ata_scsi_hotplug - SCSI part of hotplug
3261 * @work: Pointer to ATA port to perform SCSI hotplug on
3263 * Perform SCSI part of hotplug. It's executed from a separate
3264 * workqueue after EH completes. This is necessary because SCSI
3265 * hot plugging requires working EH and hot unplugging is
3266 * synchronized with hot plugging with a mutex.
3269 * Kernel thread context (may sleep).
3271 void ata_scsi_hotplug(struct work_struct *work)
3273 struct ata_port *ap =
3274 container_of(work, struct ata_port, hotplug_task.work);
3277 if (ap->pflags & ATA_PFLAG_UNLOADING) {
3278 DPRINTK("ENTER/EXIT - unloading\n");
3284 /* Unplug detached devices. We cannot use link iterator here
3285 * because PMP links have to be scanned even if PMP is
3286 * currently not attached. Iterate manually.
3288 ata_scsi_handle_link_detach(&ap->link);
3290 for (i = 0; i < SATA_PMP_MAX_PORTS; i++)
3291 ata_scsi_handle_link_detach(&ap->pmp_link[i]);
3293 /* scan for new ones */
3294 ata_scsi_scan_host(ap, 0);
3300 * ata_scsi_user_scan - indication for user-initiated bus scan
3301 * @shost: SCSI host to scan
3302 * @channel: Channel to scan
3306 * This function is called when user explicitly requests bus
3307 * scan. Set probe pending flag and invoke EH.
3310 * SCSI layer (we don't care)
3315 static int ata_scsi_user_scan(struct Scsi_Host *shost, unsigned int channel,
3316 unsigned int id, unsigned int lun)
3318 struct ata_port *ap = ata_shost_to_port(shost);
3319 unsigned long flags;
3322 if (!ap->ops->error_handler)
3325 if (lun != SCAN_WILD_CARD && lun)
3328 if (ap->nr_pmp_links == 0) {
3329 if (channel != SCAN_WILD_CARD && channel)
3333 if (id != SCAN_WILD_CARD && id)
3338 spin_lock_irqsave(ap->lock, flags);
3340 if (devno == SCAN_WILD_CARD) {
3341 struct ata_link *link;
3343 ata_port_for_each_link(link, ap) {
3344 struct ata_eh_info *ehi = &link->eh_info;
3345 ehi->probe_mask |= (1 << ata_link_max_devices(link)) - 1;
3346 ehi->action |= ATA_EH_SOFTRESET;
3349 struct ata_device *dev = ata_find_dev(ap, devno);
3352 struct ata_eh_info *ehi = &dev->link->eh_info;
3353 ehi->probe_mask |= 1 << dev->devno;
3354 ehi->action |= ATA_EH_SOFTRESET;
3355 ehi->flags |= ATA_EHI_RESUME_LINK;
3361 ata_port_schedule_eh(ap);
3362 spin_unlock_irqrestore(ap->lock, flags);
3363 ata_port_wait_eh(ap);
3365 spin_unlock_irqrestore(ap->lock, flags);
3371 * ata_scsi_dev_rescan - initiate scsi_rescan_device()
3372 * @work: Pointer to ATA port to perform scsi_rescan_device()
3374 * After ATA pass thru (SAT) commands are executed successfully,
3375 * libata need to propagate the changes to SCSI layer. This
3376 * function must be executed from ata_aux_wq such that sdev
3377 * attach/detach don't race with rescan.
3380 * Kernel thread context (may sleep).
3382 void ata_scsi_dev_rescan(struct work_struct *work)
3384 struct ata_port *ap =
3385 container_of(work, struct ata_port, scsi_rescan_task);
3386 struct ata_link *link;
3387 struct ata_device *dev;
3388 unsigned long flags;
3390 spin_lock_irqsave(ap->lock, flags);
3392 ata_port_for_each_link(link, ap) {
3393 ata_link_for_each_dev(dev, link) {
3394 struct scsi_device *sdev = dev->sdev;
3396 if (!ata_dev_enabled(dev) || !sdev)
3398 if (scsi_device_get(sdev))
3401 spin_unlock_irqrestore(ap->lock, flags);
3402 scsi_rescan_device(&(sdev->sdev_gendev));
3403 scsi_device_put(sdev);
3404 spin_lock_irqsave(ap->lock, flags);
3408 spin_unlock_irqrestore(ap->lock, flags);
3412 * ata_sas_port_alloc - Allocate port for a SAS attached SATA device
3413 * @host: ATA host container for all SAS ports
3414 * @port_info: Information from low-level host driver
3415 * @shost: SCSI host that the scsi device is attached to
3418 * PCI/etc. bus probe sem.
3421 * ata_port pointer on success / NULL on failure.
3424 struct ata_port *ata_sas_port_alloc(struct ata_host *host,
3425 struct ata_port_info *port_info,
3426 struct Scsi_Host *shost)
3428 struct ata_port *ap;
3430 ap = ata_port_alloc(host);
3435 ap->lock = shost->host_lock;
3436 ap->pio_mask = port_info->pio_mask;
3437 ap->mwdma_mask = port_info->mwdma_mask;
3438 ap->udma_mask = port_info->udma_mask;
3439 ap->flags |= port_info->flags;
3440 ap->ops = port_info->port_ops;
3441 ap->cbl = ATA_CBL_SATA;
3445 EXPORT_SYMBOL_GPL(ata_sas_port_alloc);
3448 * ata_sas_port_start - Set port up for dma.
3449 * @ap: Port to initialize
3451 * Called just after data structures for each port are
3452 * initialized. Allocates DMA pad.
3454 * May be used as the port_start() entry in ata_port_operations.
3457 * Inherited from caller.
3459 int ata_sas_port_start(struct ata_port *ap)
3461 return ata_pad_alloc(ap, ap->dev);
3463 EXPORT_SYMBOL_GPL(ata_sas_port_start);
3466 * ata_port_stop - Undo ata_sas_port_start()
3467 * @ap: Port to shut down
3469 * Frees the DMA pad.
3471 * May be used as the port_stop() entry in ata_port_operations.
3474 * Inherited from caller.
3477 void ata_sas_port_stop(struct ata_port *ap)
3479 ata_pad_free(ap, ap->dev);
3481 EXPORT_SYMBOL_GPL(ata_sas_port_stop);
3484 * ata_sas_port_init - Initialize a SATA device
3485 * @ap: SATA port to initialize
3488 * PCI/etc. bus probe sem.
3491 * Zero on success, non-zero on error.
3494 int ata_sas_port_init(struct ata_port *ap)
3496 int rc = ap->ops->port_start(ap);
3499 ap->print_id = ata_print_id++;
3500 rc = ata_bus_probe(ap);
3505 EXPORT_SYMBOL_GPL(ata_sas_port_init);
3508 * ata_sas_port_destroy - Destroy a SATA port allocated by ata_sas_port_alloc
3509 * @ap: SATA port to destroy
3513 void ata_sas_port_destroy(struct ata_port *ap)
3515 if (ap->ops->port_stop)
3516 ap->ops->port_stop(ap);
3519 EXPORT_SYMBOL_GPL(ata_sas_port_destroy);
3522 * ata_sas_slave_configure - Default slave_config routine for libata devices
3523 * @sdev: SCSI device to configure
3524 * @ap: ATA port to which SCSI device is attached
3530 int ata_sas_slave_configure(struct scsi_device *sdev, struct ata_port *ap)
3532 ata_scsi_sdev_config(sdev);
3533 ata_scsi_dev_config(sdev, ap->link.device);
3536 EXPORT_SYMBOL_GPL(ata_sas_slave_configure);
3539 * ata_sas_queuecmd - Issue SCSI cdb to libata-managed device
3540 * @cmd: SCSI command to be sent
3541 * @done: Completion function, called when command is complete
3542 * @ap: ATA port to which the command is being sent
3545 * Return value from __ata_scsi_queuecmd() if @cmd can be queued,
3549 int ata_sas_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *),
3550 struct ata_port *ap)
3554 ata_scsi_dump_cdb(ap, cmd);
3556 if (likely(ata_scsi_dev_enabled(ap->link.device)))
3557 rc = __ata_scsi_queuecmd(cmd, done, ap->link.device);
3559 cmd->result = (DID_BAD_TARGET << 16);
3564 EXPORT_SYMBOL_GPL(ata_sas_queuecmd);