2 libata-scsi.c - helper library for ATA
4 Copyright 2003-2004 Red Hat, Inc. All rights reserved.
5 Copyright 2003-2004 Jeff Garzik
7 The contents of this file are subject to the Open
8 Software License version 1.1 that can be found at
9 http://www.opensource.org/licenses/osl-1.1.txt and is included herein
12 Alternatively, the contents of this file may be used under the terms
13 of the GNU General Public License version 2 (the "GPL") as distributed
14 in the kernel source COPYING file, in which case the provisions of
15 the GPL are applicable instead of the above. If you wish to allow
16 the use of your version of this file only under the terms of the
17 GPL and not to allow others to use your version of this file under
18 the OSL, indicate your decision by deleting the provisions above and
19 replace them with the notice and other provisions required by the GPL.
20 If you do not delete the provisions above, a recipient may use your
21 version of this file under either the OSL or the GPL.
25 #include <linux/kernel.h>
26 #include <linux/blkdev.h>
27 #include <linux/spinlock.h>
28 #include <scsi/scsi.h>
30 #include <scsi/scsi_host.h>
31 #include <linux/libata.h>
32 #include <linux/hdreg.h>
33 #include <asm/uaccess.h>
37 #define SECTOR_SIZE 512
39 typedef unsigned int (*ata_xlat_func_t)(struct ata_queued_cmd *qc, u8 *scsicmd);
40 static struct ata_device *
41 ata_scsi_find_dev(struct ata_port *ap, struct scsi_device *scsidev);
45 * ata_std_bios_param - generic bios head/sector/cylinder calculator used by sd.
46 * @sdev: SCSI device for which BIOS geometry is to be determined
47 * @bdev: block device associated with @sdev
48 * @capacity: capacity of SCSI device
49 * @geom: location to which geometry will be output
51 * Generic bios head/sector/cylinder calculator
52 * used by sd. Most BIOSes nowadays expect a XXX/255/16 (CHS)
53 * mapping. Some situations may arise where the disk is not
54 * bootable if this is not used.
57 * Defined by the SCSI layer. We don't really care.
62 int ata_std_bios_param(struct scsi_device *sdev, struct block_device *bdev,
63 sector_t capacity, int geom[])
67 sector_div(capacity, 255*63);
74 * ata_cmd_ioctl - Handler for HDIO_DRIVE_CMD ioctl
75 * @dev: Device to whom we are issuing command
76 * @arg: User provided data for issuing command
79 * Defined by the SCSI layer. We don't really care.
82 * Zero on success, negative errno on error.
85 int ata_cmd_ioctl(struct scsi_device *scsidev, void __user *arg)
88 u8 scsi_cmd[MAX_COMMAND_SIZE];
89 u8 args[4], *argbuf = NULL;
91 struct scsi_request *sreq;
93 if (NULL == (void *)arg)
96 if (copy_from_user(args, arg, sizeof(args)))
99 sreq = scsi_allocate_request(scsidev, GFP_KERNEL);
103 memset(scsi_cmd, 0, sizeof(scsi_cmd));
106 argsize = SECTOR_SIZE * args[3];
107 argbuf = kmalloc(argsize, GFP_KERNEL);
111 scsi_cmd[1] = (4 << 1); /* PIO Data-in */
112 scsi_cmd[2] = 0x0e; /* no off.line or cc, read from dev,
113 block count in sector count field */
114 sreq->sr_data_direction = DMA_FROM_DEVICE;
116 scsi_cmd[1] = (3 << 1); /* Non-data */
117 /* scsi_cmd[2] is already 0 -- no off.line, cc, or data xfer */
118 sreq->sr_data_direction = DMA_NONE;
121 scsi_cmd[0] = ATA_16;
123 scsi_cmd[4] = args[2];
124 if (args[0] == WIN_SMART) { /* hack -- ide driver does this too... */
125 scsi_cmd[6] = args[3];
126 scsi_cmd[8] = args[1];
130 scsi_cmd[6] = args[1];
132 scsi_cmd[14] = args[0];
134 /* Good values for timeout and retries? Values below
135 from scsi_ioctl_send_command() for default case... */
136 scsi_wait_req(sreq, scsi_cmd, argbuf, argsize, (10*HZ), 5);
138 if (sreq->sr_result) {
143 /* Need code to retrieve data from check condition? */
146 && copy_to_user((void *)(arg + sizeof(args)), argbuf, argsize))
149 scsi_release_request(sreq);
158 * ata_task_ioctl - Handler for HDIO_DRIVE_TASK ioctl
159 * @dev: Device to whom we are issuing command
160 * @arg: User provided data for issuing command
163 * Defined by the SCSI layer. We don't really care.
166 * Zero on success, negative errno on error.
168 int ata_task_ioctl(struct scsi_device *scsidev, void __user *arg)
171 u8 scsi_cmd[MAX_COMMAND_SIZE];
173 struct scsi_request *sreq;
175 if (NULL == (void *)arg)
178 if (copy_from_user(args, arg, sizeof(args)))
181 memset(scsi_cmd, 0, sizeof(scsi_cmd));
182 scsi_cmd[0] = ATA_16;
183 scsi_cmd[1] = (3 << 1); /* Non-data */
184 /* scsi_cmd[2] is already 0 -- no off.line, cc, or data xfer */
185 scsi_cmd[4] = args[1];
186 scsi_cmd[6] = args[2];
187 scsi_cmd[8] = args[3];
188 scsi_cmd[10] = args[4];
189 scsi_cmd[12] = args[5];
190 scsi_cmd[14] = args[0];
192 sreq = scsi_allocate_request(scsidev, GFP_KERNEL);
198 sreq->sr_data_direction = DMA_NONE;
199 /* Good values for timeout and retries? Values below
200 from scsi_ioctl_send_command() for default case... */
201 scsi_wait_req(sreq, scsi_cmd, NULL, 0, (10*HZ), 5);
203 if (sreq->sr_result) {
208 /* Need code to retrieve data from check condition? */
211 scsi_release_request(sreq);
215 int ata_scsi_ioctl(struct scsi_device *scsidev, int cmd, void __user *arg)
218 struct ata_device *dev;
219 int val = -EINVAL, rc = -EINVAL;
221 ap = (struct ata_port *) &scsidev->host->hostdata[0];
225 dev = ata_scsi_find_dev(ap, scsidev);
232 case ATA_IOC_GET_IO32:
234 if (copy_to_user(arg, &val, 1))
238 case ATA_IOC_SET_IO32:
239 val = (unsigned long) arg;
245 if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO))
247 return ata_cmd_ioctl(scsidev, arg);
249 case HDIO_DRIVE_TASK:
250 if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO))
252 return ata_task_ioctl(scsidev, arg);
264 * ata_scsi_qc_new - acquire new ata_queued_cmd reference
265 * @ap: ATA port to which the new command is attached
266 * @dev: ATA device to which the new command is attached
267 * @cmd: SCSI command that originated this ATA command
268 * @done: SCSI command completion function
270 * Obtain a reference to an unused ata_queued_cmd structure,
271 * which is the basic libata structure representing a single
272 * ATA command sent to the hardware.
274 * If a command was available, fill in the SCSI-specific
275 * portions of the structure with information on the
279 * spin_lock_irqsave(host_set lock)
282 * Command allocated, or %NULL if none available.
284 struct ata_queued_cmd *ata_scsi_qc_new(struct ata_port *ap,
285 struct ata_device *dev,
286 struct scsi_cmnd *cmd,
287 void (*done)(struct scsi_cmnd *))
289 struct ata_queued_cmd *qc;
291 qc = ata_qc_new_init(ap, dev);
297 qc->sg = (struct scatterlist *) cmd->request_buffer;
298 qc->n_elem = cmd->use_sg;
304 cmd->result = (DID_OK << 16) | (QUEUE_FULL << 1);
312 * ata_dump_status - user friendly display of error info
313 * @id: id of the port in question
314 * @tf: ptr to filled out taskfile
316 * Decode and dump the ATA error/status registers for the user so
317 * that they have some idea what really happened at the non
318 * make-believe layer.
321 * inherited from caller
323 void ata_dump_status(unsigned id, struct ata_taskfile *tf)
325 u8 stat = tf->command, err = tf->feature;
327 printk(KERN_WARNING "ata%u: status=0x%02x { ", id, stat);
328 if (stat & ATA_BUSY) {
329 printk("Busy }\n"); /* Data is not valid in this case */
331 if (stat & 0x40) printk("DriveReady ");
332 if (stat & 0x20) printk("DeviceFault ");
333 if (stat & 0x10) printk("SeekComplete ");
334 if (stat & 0x08) printk("DataRequest ");
335 if (stat & 0x04) printk("CorrectedError ");
336 if (stat & 0x02) printk("Index ");
337 if (stat & 0x01) printk("Error ");
341 printk(KERN_WARNING "ata%u: error=0x%02x { ", id, err);
342 if (err & 0x04) printk("DriveStatusError ");
344 if (err & 0x04) printk("BadCRC ");
345 else printk("Sector ");
347 if (err & 0x40) printk("UncorrectableError ");
348 if (err & 0x10) printk("SectorIdNotFound ");
349 if (err & 0x02) printk("TrackZeroNotFound ");
350 if (err & 0x01) printk("AddrMarkNotFound ");
357 * ata_to_sense_error - convert ATA error to SCSI error
358 * @drv_stat: value contained in ATA status register
359 * @drv_err: value contained in ATA error register
360 * @sk: the sense key we'll fill out
361 * @asc: the additional sense code we'll fill out
362 * @ascq: the additional sense code qualifier we'll fill out
364 * Converts an ATA error into a SCSI error. Fill out pointers to
365 * SK, ASC, and ASCQ bytes for later use in fixed or descriptor
366 * format sense blocks.
369 * spin_lock_irqsave(host_set lock)
371 void ata_to_sense_error(unsigned id, u8 drv_stat, u8 drv_err, u8 *sk, u8 *asc,
375 /* Based on the 3ware driver translation table */
376 static unsigned char sense_table[][4] = {
378 {0xd1, ABORTED_COMMAND, 0x00, 0x00}, // Device busy Aborted command
380 {0xd0, ABORTED_COMMAND, 0x00, 0x00}, // Device busy Aborted command
382 {0x61, HARDWARE_ERROR, 0x00, 0x00}, // Device fault Hardware error
383 /* ICRC|ABRT */ /* NB: ICRC & !ABRT is BBD */
384 {0x84, ABORTED_COMMAND, 0x47, 0x00}, // Data CRC error SCSI parity error
385 /* MC|ID|ABRT|TRK0|MARK */
386 {0x37, NOT_READY, 0x04, 0x00}, // Unit offline Not ready
388 {0x09, NOT_READY, 0x04, 0x00}, // Unrecovered disk error Not ready
389 /* Bad address mark */
390 {0x01, MEDIUM_ERROR, 0x13, 0x00}, // Address mark not found Address mark not found for data field
392 {0x02, HARDWARE_ERROR, 0x00, 0x00}, // Track 0 not found Hardware error
394 {0x04, ABORTED_COMMAND, 0x00, 0x00}, // Aborted command Aborted command
395 /* Media change request */
396 {0x08, NOT_READY, 0x04, 0x00}, // Media change request FIXME: faking offline
398 {0x10, ABORTED_COMMAND, 0x14, 0x00}, // ID not found Recorded entity not found
400 {0x08, NOT_READY, 0x04, 0x00}, // Media change FIXME: faking offline
402 {0x40, MEDIUM_ERROR, 0x11, 0x04}, // Uncorrectable ECC error Unrecovered read error
403 /* BBD - block marked bad */
404 {0x80, MEDIUM_ERROR, 0x11, 0x04}, // Block marked bad Medium error, unrecovered read error
405 {0xFF, 0xFF, 0xFF, 0xFF}, // END mark
407 static unsigned char stat_table[][4] = {
408 /* Must be first because BUSY means no other bits valid */
409 {0x80, ABORTED_COMMAND, 0x47, 0x00}, // Busy, fake parity for now
410 {0x20, HARDWARE_ERROR, 0x00, 0x00}, // Device fault
411 {0x08, ABORTED_COMMAND, 0x47, 0x00}, // Timed out in xfer, fake parity for now
412 {0x04, RECOVERED_ERROR, 0x11, 0x00}, // Recovered ECC error Medium error, recovered
413 {0xFF, 0xFF, 0xFF, 0xFF}, // END mark
417 * Is this an error we can process/parse
419 if (drv_stat & ATA_BUSY) {
420 drv_err = 0; /* Ignore the err bits, they're invalid */
424 /* Look for drv_err */
425 for (i = 0; sense_table[i][0] != 0xFF; i++) {
426 /* Look for best matches first */
427 if ((sense_table[i][0] & drv_err) ==
429 *sk = sense_table[i][1];
430 *asc = sense_table[i][2];
431 *ascq = sense_table[i][3];
435 /* No immediate match */
436 printk(KERN_WARNING "ata%u: no sense translation for "
437 "error 0x%02x\n", id, drv_err);
440 /* Fall back to interpreting status bits */
441 for (i = 0; stat_table[i][0] != 0xFF; i++) {
442 if (stat_table[i][0] & drv_stat) {
443 *sk = stat_table[i][1];
444 *asc = stat_table[i][2];
445 *ascq = stat_table[i][3];
449 /* No error? Undecoded? */
450 printk(KERN_WARNING "ata%u: no sense translation for status: 0x%02x\n",
453 /* For our last chance pick, use medium read error because
454 * it's much more common than an ATA drive telling you a write
458 *asc = 0x11; /* "unrecovered read error" */
459 *ascq = 0x04; /* "auto-reallocation failed" */
462 printk(KERN_ERR "ata%u: translated ATA stat/err 0x%02x/%02x to "
463 "SCSI SK/ASC/ASCQ 0x%x/%02x/%02x\n", id, drv_stat, drv_err,
469 * ata_gen_ata_desc_sense - Generate check condition sense block.
470 * @qc: Command that completed.
472 * This function is specific to the ATA descriptor format sense
473 * block specified for the ATA pass through commands. Regardless
474 * of whether the command errored or not, return a sense
475 * block. Copy all controller registers into the sense
476 * block. Clear sense key, ASC & ASCQ if there is no error.
479 * spin_lock_irqsave(host_set lock)
481 void ata_gen_ata_desc_sense(struct ata_queued_cmd *qc)
483 struct scsi_cmnd *cmd = qc->scsicmd;
484 struct ata_taskfile *tf = &qc->tf;
485 unsigned char *sb = cmd->sense_buffer;
486 unsigned char *desc = sb + 8;
488 memset(sb, 0, SCSI_SENSE_BUFFERSIZE);
490 cmd->result = SAM_STAT_CHECK_CONDITION;
493 * Read the controller registers.
495 assert(NULL != qc->ap->ops->tf_read);
496 qc->ap->ops->tf_read(qc->ap, tf);
499 * Use ata_to_sense_error() to map status register bits
500 * onto sense key, asc & ascq.
502 if (unlikely(tf->command & (ATA_BUSY | ATA_DF | ATA_ERR | ATA_DRQ))) {
503 ata_to_sense_error(qc->ap->id, tf->command, tf->feature,
504 &sb[1], &sb[2], &sb[3]);
509 * Sense data is current and format is descriptor.
516 * Set length of additional sense data.
517 * Since we only populate descriptor 0, the total
518 * length is the same (fixed) length as descriptor 0.
520 desc[1] = sb[7] = 14;
523 * Copy registers into sense buffer.
526 desc[3] = tf->feature; /* == error reg */
531 desc[12] = tf->device;
532 desc[13] = tf->command; /* == status reg */
535 * Fill in Extend bit, and the high order bytes
538 if (tf->flags & ATA_TFLAG_LBA48) {
540 desc[4] = tf->hob_nsect;
541 desc[6] = tf->hob_lbal;
542 desc[8] = tf->hob_lbam;
543 desc[10] = tf->hob_lbah;
548 * ata_gen_fixed_sense - generate a SCSI fixed sense block
549 * @qc: Command that we are erroring out
551 * Leverage ata_to_sense_error() to give us the codes. Fit our
552 * LBA in here if there's room.
555 * inherited from caller
557 void ata_gen_fixed_sense(struct ata_queued_cmd *qc)
559 struct scsi_cmnd *cmd = qc->scsicmd;
560 struct ata_taskfile *tf = &qc->tf;
561 unsigned char *sb = cmd->sense_buffer;
563 memset(sb, 0, SCSI_SENSE_BUFFERSIZE);
565 cmd->result = SAM_STAT_CHECK_CONDITION;
568 * Read the controller registers.
570 assert(NULL != qc->ap->ops->tf_read);
571 qc->ap->ops->tf_read(qc->ap, tf);
574 * Use ata_to_sense_error() to map status register bits
575 * onto sense key, asc & ascq.
577 if (unlikely(tf->command & (ATA_BUSY | ATA_DF | ATA_ERR | ATA_DRQ))) {
578 ata_to_sense_error(qc->ap->id, tf->command, tf->feature,
579 &sb[2], &sb[12], &sb[13]);
585 if (tf->flags & ATA_TFLAG_LBA && !(tf->flags & ATA_TFLAG_LBA48)) {
586 /* A small (28b) LBA will fit in the 32b info field */
587 sb[0] |= 0x80; /* set valid bit */
588 sb[3] = tf->device & 0x0f;
596 * ata_scsi_slave_config - Set SCSI device attributes
597 * @sdev: SCSI device to examine
599 * This is called before we actually start reading
600 * and writing to the device, to configure certain
601 * SCSI mid-layer behaviors.
604 * Defined by SCSI layer. We don't really care.
607 int ata_scsi_slave_config(struct scsi_device *sdev)
609 sdev->use_10_for_rw = 1;
610 sdev->use_10_for_ms = 1;
612 blk_queue_max_phys_segments(sdev->request_queue, LIBATA_MAX_PRD);
614 if (sdev->id < ATA_MAX_DEVICES) {
616 struct ata_device *dev;
618 ap = (struct ata_port *) &sdev->host->hostdata[0];
619 dev = &ap->device[sdev->id];
621 /* TODO: 1024 is an arbitrary number, not the
622 * hardware maximum. This should be increased to
623 * 65534 when Jens Axboe's patch for dynamically
624 * determining max_sectors is merged.
626 if ((dev->flags & ATA_DFLAG_LBA48) &&
627 ((dev->flags & ATA_DFLAG_LOCK_SECTORS) == 0)) {
628 sdev->host->max_sectors = 2048;
629 blk_queue_max_sectors(sdev->request_queue, 2048);
633 return 0; /* scsi layer doesn't check return value, sigh */
637 * ata_scsi_error - SCSI layer error handler callback
638 * @host: SCSI host on which error occurred
640 * Handles SCSI-layer-thrown error events.
643 * Inherited from SCSI layer (none, can sleep)
649 int ata_scsi_error(struct Scsi_Host *host)
655 ap = (struct ata_port *) &host->hostdata[0];
656 ap->ops->eng_timeout(ap);
658 /* TODO: this is per-command; when queueing is supported
659 * this code will either change or move to a more
669 * ata_scsi_flush_xlat - Translate SCSI SYNCHRONIZE CACHE command
670 * @qc: Storage for translated ATA taskfile
671 * @scsicmd: SCSI command to translate (ignored)
673 * Sets up an ATA taskfile to issue FLUSH CACHE or
677 * spin_lock_irqsave(host_set lock)
680 * Zero on success, non-zero on error.
683 static unsigned int ata_scsi_flush_xlat(struct ata_queued_cmd *qc, u8 *scsicmd)
685 struct ata_taskfile *tf = &qc->tf;
687 tf->flags |= ATA_TFLAG_DEVICE;
688 tf->protocol = ATA_PROT_NODATA;
690 if ((tf->flags & ATA_TFLAG_LBA48) &&
691 (ata_id_has_flush_ext(qc->dev->id)))
692 tf->command = ATA_CMD_FLUSH_EXT;
694 tf->command = ATA_CMD_FLUSH;
700 * ata_scsi_verify_xlat - Translate SCSI VERIFY command into an ATA one
701 * @qc: Storage for translated ATA taskfile
702 * @scsicmd: SCSI command to translate
704 * Converts SCSI VERIFY command to an ATA READ VERIFY command.
707 * spin_lock_irqsave(host_set lock)
710 * Zero on success, non-zero on error.
713 static unsigned int ata_scsi_verify_xlat(struct ata_queued_cmd *qc, u8 *scsicmd)
715 struct ata_taskfile *tf = &qc->tf;
716 unsigned int lba48 = tf->flags & ATA_TFLAG_LBA48;
717 u64 dev_sectors = qc->dev->n_sectors;
721 tf->flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
722 tf->protocol = ATA_PROT_NODATA;
723 tf->device |= ATA_LBA;
725 if (scsicmd[0] == VERIFY) {
726 sect |= ((u64)scsicmd[2]) << 24;
727 sect |= ((u64)scsicmd[3]) << 16;
728 sect |= ((u64)scsicmd[4]) << 8;
729 sect |= ((u64)scsicmd[5]);
731 n_sect |= ((u32)scsicmd[7]) << 8;
732 n_sect |= ((u32)scsicmd[8]);
735 else if (scsicmd[0] == VERIFY_16) {
736 sect |= ((u64)scsicmd[2]) << 56;
737 sect |= ((u64)scsicmd[3]) << 48;
738 sect |= ((u64)scsicmd[4]) << 40;
739 sect |= ((u64)scsicmd[5]) << 32;
740 sect |= ((u64)scsicmd[6]) << 24;
741 sect |= ((u64)scsicmd[7]) << 16;
742 sect |= ((u64)scsicmd[8]) << 8;
743 sect |= ((u64)scsicmd[9]);
745 n_sect |= ((u32)scsicmd[10]) << 24;
746 n_sect |= ((u32)scsicmd[11]) << 16;
747 n_sect |= ((u32)scsicmd[12]) << 8;
748 n_sect |= ((u32)scsicmd[13]);
756 if (sect >= dev_sectors)
758 if ((sect + n_sect) > dev_sectors)
761 if (n_sect > (64 * 1024))
769 tf->command = ATA_CMD_VERIFY_EXT;
771 tf->hob_nsect = (n_sect >> 8) & 0xff;
773 tf->hob_lbah = (sect >> 40) & 0xff;
774 tf->hob_lbam = (sect >> 32) & 0xff;
775 tf->hob_lbal = (sect >> 24) & 0xff;
777 tf->command = ATA_CMD_VERIFY;
779 tf->device |= (sect >> 24) & 0xf;
782 tf->nsect = n_sect & 0xff;
784 tf->lbah = (sect >> 16) & 0xff;
785 tf->lbam = (sect >> 8) & 0xff;
786 tf->lbal = sect & 0xff;
792 * ata_scsi_rw_xlat - Translate SCSI r/w command into an ATA one
793 * @qc: Storage for translated ATA taskfile
794 * @scsicmd: SCSI command to translate
796 * Converts any of six SCSI read/write commands into the
797 * ATA counterpart, including starting sector (LBA),
798 * sector count, and taking into account the device's LBA48
801 * Commands %READ_6, %READ_10, %READ_16, %WRITE_6, %WRITE_10, and
802 * %WRITE_16 are currently supported.
805 * spin_lock_irqsave(host_set lock)
808 * Zero on success, non-zero on error.
811 static unsigned int ata_scsi_rw_xlat(struct ata_queued_cmd *qc, u8 *scsicmd)
813 struct ata_taskfile *tf = &qc->tf;
814 unsigned int lba48 = tf->flags & ATA_TFLAG_LBA48;
816 tf->flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
817 tf->protocol = qc->dev->xfer_protocol;
818 tf->device |= ATA_LBA;
820 if (scsicmd[0] == READ_10 || scsicmd[0] == READ_6 ||
821 scsicmd[0] == READ_16) {
822 tf->command = qc->dev->read_cmd;
824 tf->command = qc->dev->write_cmd;
825 tf->flags |= ATA_TFLAG_WRITE;
828 if (scsicmd[0] == READ_10 || scsicmd[0] == WRITE_10) {
830 tf->hob_nsect = scsicmd[7];
831 tf->hob_lbal = scsicmd[2];
833 qc->nsect = ((unsigned int)scsicmd[7] << 8) |
836 /* if we don't support LBA48 addressing, the request
837 * -may- be too large. */
838 if ((scsicmd[2] & 0xf0) || scsicmd[7])
841 /* stores LBA27:24 in lower 4 bits of device reg */
842 tf->device |= scsicmd[2];
844 qc->nsect = scsicmd[8];
847 tf->nsect = scsicmd[8];
848 tf->lbal = scsicmd[5];
849 tf->lbam = scsicmd[4];
850 tf->lbah = scsicmd[3];
852 VPRINTK("ten-byte command\n");
856 if (scsicmd[0] == READ_6 || scsicmd[0] == WRITE_6) {
857 qc->nsect = tf->nsect = scsicmd[4];
858 tf->lbal = scsicmd[3];
859 tf->lbam = scsicmd[2];
860 tf->lbah = scsicmd[1] & 0x1f; /* mask out reserved bits */
862 VPRINTK("six-byte command\n");
866 if (scsicmd[0] == READ_16 || scsicmd[0] == WRITE_16) {
867 /* rule out impossible LBAs and sector counts */
868 if (scsicmd[2] || scsicmd[3] || scsicmd[10] || scsicmd[11])
872 tf->hob_nsect = scsicmd[12];
873 tf->hob_lbal = scsicmd[6];
874 tf->hob_lbam = scsicmd[5];
875 tf->hob_lbah = scsicmd[4];
877 qc->nsect = ((unsigned int)scsicmd[12] << 8) |
880 /* once again, filter out impossible non-zero values */
881 if (scsicmd[4] || scsicmd[5] || scsicmd[12] ||
885 /* stores LBA27:24 in lower 4 bits of device reg */
886 tf->device |= scsicmd[6];
888 qc->nsect = scsicmd[13];
891 tf->nsect = scsicmd[13];
892 tf->lbal = scsicmd[9];
893 tf->lbam = scsicmd[8];
894 tf->lbah = scsicmd[7];
896 VPRINTK("sixteen-byte command\n");
900 DPRINTK("no-byte command\n");
904 static int ata_scsi_qc_complete(struct ata_queued_cmd *qc, u8 drv_stat)
906 struct scsi_cmnd *cmd = qc->scsicmd;
907 int need_sense = drv_stat & (ATA_ERR | ATA_BUSY | ATA_DRQ);
909 /* For ATA pass thru (SAT) commands, generate a sense block if
910 * user mandated it or if there's an error. Note that if we
911 * generate because the user forced us to, a check condition
912 * is generated and the ATA register values are returned
913 * whether the command completed successfully or not. If there
914 * was no error, SK, ASC and ASCQ will all be zero.
916 if (((cmd->cmnd[0] == ATA_16) || (cmd->cmnd[0] == ATA_12)) &&
917 ((cmd->cmnd[2] & 0x20) || need_sense)) {
918 ata_gen_ata_desc_sense(qc);
921 cmd->result = SAM_STAT_GOOD;
923 /* TODO: decide which descriptor format to use
924 * for 48b LBA devices and call that here
925 * instead of the fixed desc, which is only
926 * good for smaller LBA (and maybe CHS?)
929 ata_gen_fixed_sense(qc);
934 /* The ata_gen_..._sense routines fill in tf */
935 ata_dump_status(qc->ap->id, &qc->tf);
944 * ata_scsi_translate - Translate then issue SCSI command to ATA device
945 * @ap: ATA port to which the command is addressed
946 * @dev: ATA device to which the command is addressed
947 * @cmd: SCSI command to execute
948 * @done: SCSI command completion function
949 * @xlat_func: Actor which translates @cmd to an ATA taskfile
951 * Our ->queuecommand() function has decided that the SCSI
952 * command issued can be directly translated into an ATA
953 * command, rather than handled internally.
955 * This function sets up an ata_queued_cmd structure for the
956 * SCSI command, and sends that ata_queued_cmd to the hardware.
959 * spin_lock_irqsave(host_set lock)
962 static void ata_scsi_translate(struct ata_port *ap, struct ata_device *dev,
963 struct scsi_cmnd *cmd,
964 void (*done)(struct scsi_cmnd *),
965 ata_xlat_func_t xlat_func)
967 struct ata_queued_cmd *qc;
968 u8 *scsicmd = cmd->cmnd;
972 qc = ata_scsi_qc_new(ap, dev, cmd, done);
976 /* data is present; dma-map it */
977 if (cmd->sc_data_direction == SCSI_DATA_READ ||
978 cmd->sc_data_direction == SCSI_DATA_WRITE) {
979 if (unlikely(cmd->request_bufflen < 1)) {
980 printk(KERN_WARNING "ata%u(%u): WARNING: zero len r/w req\n",
986 ata_sg_init(qc, cmd->request_buffer, cmd->use_sg);
988 ata_sg_init_one(qc, cmd->request_buffer,
989 cmd->request_bufflen);
991 qc->dma_dir = cmd->sc_data_direction;
994 qc->complete_fn = ata_scsi_qc_complete;
996 if (xlat_func(qc, scsicmd))
998 /* select device, send command to hardware */
999 if (ata_qc_issue(qc))
1007 ata_bad_cdb(cmd, done);
1008 DPRINTK("EXIT - badcmd\n");
1012 * ata_scsi_rbuf_get - Map response buffer.
1013 * @cmd: SCSI command containing buffer to be mapped.
1014 * @buf_out: Pointer to mapped area.
1016 * Maps buffer contained within SCSI command @cmd.
1019 * spin_lock_irqsave(host_set lock)
1022 * Length of response buffer.
1025 static unsigned int ata_scsi_rbuf_get(struct scsi_cmnd *cmd, u8 **buf_out)
1028 unsigned int buflen;
1031 struct scatterlist *sg;
1033 sg = (struct scatterlist *) cmd->request_buffer;
1034 buf = kmap_atomic(sg->page, KM_USER0) + sg->offset;
1035 buflen = sg->length;
1037 buf = cmd->request_buffer;
1038 buflen = cmd->request_bufflen;
1046 * ata_scsi_rbuf_put - Unmap response buffer.
1047 * @cmd: SCSI command containing buffer to be unmapped.
1048 * @buf: buffer to unmap
1050 * Unmaps response buffer contained within @cmd.
1053 * spin_lock_irqsave(host_set lock)
1056 static inline void ata_scsi_rbuf_put(struct scsi_cmnd *cmd, u8 *buf)
1059 struct scatterlist *sg;
1061 sg = (struct scatterlist *) cmd->request_buffer;
1062 kunmap_atomic(buf - sg->offset, KM_USER0);
1067 * ata_scsi_rbuf_fill - wrapper for SCSI command simulators
1068 * @args: device IDENTIFY data / SCSI command of interest.
1069 * @actor: Callback hook for desired SCSI command simulator
1071 * Takes care of the hard work of simulating a SCSI command...
1072 * Mapping the response buffer, calling the command's handler,
1073 * and handling the handler's return value. This return value
1074 * indicates whether the handler wishes the SCSI command to be
1075 * completed successfully, or not.
1078 * spin_lock_irqsave(host_set lock)
1081 void ata_scsi_rbuf_fill(struct ata_scsi_args *args,
1082 unsigned int (*actor) (struct ata_scsi_args *args,
1083 u8 *rbuf, unsigned int buflen))
1086 unsigned int buflen, rc;
1087 struct scsi_cmnd *cmd = args->cmd;
1089 buflen = ata_scsi_rbuf_get(cmd, &rbuf);
1090 memset(rbuf, 0, buflen);
1091 rc = actor(args, rbuf, buflen);
1092 ata_scsi_rbuf_put(cmd, rbuf);
1095 ata_bad_cdb(cmd, args->done);
1097 cmd->result = SAM_STAT_GOOD;
1103 * ata_scsiop_inq_std - Simulate INQUIRY command
1104 * @args: device IDENTIFY data / SCSI command of interest.
1105 * @rbuf: Response buffer, to which simulated SCSI cmd output is sent.
1106 * @buflen: Response buffer length.
1108 * Returns standard device identification data associated
1109 * with non-EVPD INQUIRY command output.
1112 * spin_lock_irqsave(host_set lock)
1115 unsigned int ata_scsiop_inq_std(struct ata_scsi_args *args, u8 *rbuf,
1116 unsigned int buflen)
1121 0x5, /* claim SPC-3 version compatibility */
1126 /* set scsi removeable (RMB) bit per ata bit */
1127 if (ata_id_removeable(args->id))
1132 memcpy(rbuf, hdr, sizeof(hdr));
1135 memcpy(&rbuf[8], "ATA ", 8);
1136 ata_dev_id_string(args->id, &rbuf[16], ATA_ID_PROD_OFS, 16);
1137 ata_dev_id_string(args->id, &rbuf[32], ATA_ID_FW_REV_OFS, 4);
1138 if (rbuf[32] == 0 || rbuf[32] == ' ')
1139 memcpy(&rbuf[32], "n/a ", 4);
1143 const u8 versions[] = {
1144 0x60, /* SAM-3 (no version claimed) */
1147 0x20, /* SBC-2 (no version claimed) */
1150 0x60 /* SPC-3 (no version claimed) */
1153 memcpy(rbuf + 59, versions, sizeof(versions));
1160 * ata_scsiop_inq_00 - Simulate INQUIRY EVPD page 0, list of pages
1161 * @args: device IDENTIFY data / SCSI command of interest.
1162 * @rbuf: Response buffer, to which simulated SCSI cmd output is sent.
1163 * @buflen: Response buffer length.
1165 * Returns list of inquiry EVPD pages available.
1168 * spin_lock_irqsave(host_set lock)
1171 unsigned int ata_scsiop_inq_00(struct ata_scsi_args *args, u8 *rbuf,
1172 unsigned int buflen)
1174 const u8 pages[] = {
1175 0x00, /* page 0x00, this page */
1176 0x80, /* page 0x80, unit serial no page */
1177 0x83 /* page 0x83, device ident page */
1179 rbuf[3] = sizeof(pages); /* number of supported EVPD pages */
1182 memcpy(rbuf + 4, pages, sizeof(pages));
1188 * ata_scsiop_inq_80 - Simulate INQUIRY EVPD page 80, device serial number
1189 * @args: device IDENTIFY data / SCSI command of interest.
1190 * @rbuf: Response buffer, to which simulated SCSI cmd output is sent.
1191 * @buflen: Response buffer length.
1193 * Returns ATA device serial number.
1196 * spin_lock_irqsave(host_set lock)
1199 unsigned int ata_scsiop_inq_80(struct ata_scsi_args *args, u8 *rbuf,
1200 unsigned int buflen)
1204 0x80, /* this page code */
1206 ATA_SERNO_LEN, /* page len */
1208 memcpy(rbuf, hdr, sizeof(hdr));
1210 if (buflen > (ATA_SERNO_LEN + 4 - 1))
1211 ata_dev_id_string(args->id, (unsigned char *) &rbuf[4],
1212 ATA_ID_SERNO_OFS, ATA_SERNO_LEN);
1217 static const char *inq_83_str = "Linux ATA-SCSI simulator";
1220 * ata_scsiop_inq_83 - Simulate INQUIRY EVPD page 83, device identity
1221 * @args: device IDENTIFY data / SCSI command of interest.
1222 * @rbuf: Response buffer, to which simulated SCSI cmd output is sent.
1223 * @buflen: Response buffer length.
1225 * Returns device identification. Currently hardcoded to
1226 * return "Linux ATA-SCSI simulator".
1229 * spin_lock_irqsave(host_set lock)
1232 unsigned int ata_scsiop_inq_83(struct ata_scsi_args *args, u8 *rbuf,
1233 unsigned int buflen)
1235 rbuf[1] = 0x83; /* this page code */
1236 rbuf[3] = 4 + strlen(inq_83_str); /* page len */
1238 /* our one and only identification descriptor (vendor-specific) */
1239 if (buflen > (strlen(inq_83_str) + 4 + 4 - 1)) {
1240 rbuf[4 + 0] = 2; /* code set: ASCII */
1241 rbuf[4 + 3] = strlen(inq_83_str);
1242 memcpy(rbuf + 4 + 4, inq_83_str, strlen(inq_83_str));
1250 * @args: device IDENTIFY data / SCSI command of interest.
1251 * @rbuf: Response buffer, to which simulated SCSI cmd output is sent.
1252 * @buflen: Response buffer length.
1254 * No operation. Simply returns success to caller, to indicate
1255 * that the caller should successfully complete this SCSI command.
1258 * spin_lock_irqsave(host_set lock)
1261 unsigned int ata_scsiop_noop(struct ata_scsi_args *args, u8 *rbuf,
1262 unsigned int buflen)
1269 * ata_msense_push - Push data onto MODE SENSE data output buffer
1270 * @ptr_io: (input/output) Location to store more output data
1271 * @last: End of output data buffer
1272 * @buf: Pointer to BLOB being added to output buffer
1273 * @buflen: Length of BLOB
1275 * Store MODE SENSE data on an output buffer.
1281 static void ata_msense_push(u8 **ptr_io, const u8 *last,
1282 const u8 *buf, unsigned int buflen)
1286 if ((ptr + buflen - 1) > last)
1289 memcpy(ptr, buf, buflen);
1297 * ata_msense_caching - Simulate MODE SENSE caching info page
1298 * @id: device IDENTIFY data
1299 * @ptr_io: (input/output) Location to store more output data
1300 * @last: End of output data buffer
1302 * Generate a caching info page, which conditionally indicates
1303 * write caching to the SCSI layer, depending on device
1310 static unsigned int ata_msense_caching(u16 *id, u8 **ptr_io,
1314 0x8, /* page code */
1315 0x12, /* page length */
1316 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 10 zeroes */
1317 0, 0, 0, 0, 0, 0, 0, 0 /* 8 zeroes */
1320 if (ata_id_wcache_enabled(id))
1321 page[2] |= (1 << 2); /* write cache enable */
1322 if (!ata_id_rahead_enabled(id))
1323 page[12] |= (1 << 5); /* disable read ahead */
1325 ata_msense_push(ptr_io, last, page, sizeof(page));
1326 return sizeof(page);
1330 * ata_msense_ctl_mode - Simulate MODE SENSE control mode page
1331 * @dev: Device associated with this MODE SENSE command
1332 * @ptr_io: (input/output) Location to store more output data
1333 * @last: End of output data buffer
1335 * Generate a generic MODE SENSE control mode page.
1341 static unsigned int ata_msense_ctl_mode(u8 **ptr_io, const u8 *last)
1343 const u8 page[] = {0xa, 0xa, 6, 0, 0, 0, 0, 0, 0xff, 0xff, 0, 30};
1345 /* byte 2: set the descriptor format sense data bit (bit 2)
1346 * since we need to support returning this format for SAT
1347 * commands and any SCSI commands against a 48b LBA device.
1350 ata_msense_push(ptr_io, last, page, sizeof(page));
1351 return sizeof(page);
1355 * ata_msense_rw_recovery - Simulate MODE SENSE r/w error recovery page
1356 * @dev: Device associated with this MODE SENSE command
1357 * @ptr_io: (input/output) Location to store more output data
1358 * @last: End of output data buffer
1360 * Generate a generic MODE SENSE r/w error recovery page.
1366 static unsigned int ata_msense_rw_recovery(u8 **ptr_io, const u8 *last)
1369 0x1, /* page code */
1370 0xa, /* page length */
1371 (1 << 7) | (1 << 6), /* note auto r/w reallocation */
1372 0, 0, 0, 0, 0, 0, 0, 0, 0 /* 9 zeroes */
1375 ata_msense_push(ptr_io, last, page, sizeof(page));
1376 return sizeof(page);
1380 * ata_scsiop_mode_sense - Simulate MODE SENSE 6, 10 commands
1381 * @args: device IDENTIFY data / SCSI command of interest.
1382 * @rbuf: Response buffer, to which simulated SCSI cmd output is sent.
1383 * @buflen: Response buffer length.
1385 * Simulate MODE SENSE commands.
1388 * spin_lock_irqsave(host_set lock)
1391 unsigned int ata_scsiop_mode_sense(struct ata_scsi_args *args, u8 *rbuf,
1392 unsigned int buflen)
1394 u8 *scsicmd = args->cmd->cmnd, *p, *last;
1395 unsigned int page_control, six_byte, output_len;
1399 six_byte = (scsicmd[0] == MODE_SENSE);
1401 /* we only support saved and current values (which we treat
1402 * in the same manner)
1404 page_control = scsicmd[2] >> 6;
1405 if ((page_control != 0) && (page_control != 3))
1413 p = rbuf + output_len;
1414 last = rbuf + buflen - 1;
1416 switch(scsicmd[2] & 0x3f) {
1417 case 0x01: /* r/w error recovery */
1418 output_len += ata_msense_rw_recovery(&p, last);
1421 case 0x08: /* caching */
1422 output_len += ata_msense_caching(args->id, &p, last);
1425 case 0x0a: { /* control mode */
1426 output_len += ata_msense_ctl_mode(&p, last);
1430 case 0x3f: /* all pages */
1431 output_len += ata_msense_rw_recovery(&p, last);
1432 output_len += ata_msense_caching(args->id, &p, last);
1433 output_len += ata_msense_ctl_mode(&p, last);
1436 default: /* invalid page code */
1442 rbuf[0] = output_len;
1445 rbuf[0] = output_len >> 8;
1446 rbuf[1] = output_len;
1453 * ata_scsiop_read_cap - Simulate READ CAPACITY[ 16] commands
1454 * @args: device IDENTIFY data / SCSI command of interest.
1455 * @rbuf: Response buffer, to which simulated SCSI cmd output is sent.
1456 * @buflen: Response buffer length.
1458 * Simulate READ CAPACITY commands.
1461 * spin_lock_irqsave(host_set lock)
1464 unsigned int ata_scsiop_read_cap(struct ata_scsi_args *args, u8 *rbuf,
1465 unsigned int buflen)
1472 if (ata_id_has_lba48(args->id))
1473 n_sectors = ata_id_u64(args->id, 100);
1475 n_sectors = ata_id_u32(args->id, 60);
1476 n_sectors--; /* ATA TotalUserSectors - 1 */
1478 tmp = n_sectors; /* note: truncates, if lba48 */
1479 if (args->cmd->cmnd[0] == READ_CAPACITY) {
1480 /* sector count, 32-bit */
1481 rbuf[0] = tmp >> (8 * 3);
1482 rbuf[1] = tmp >> (8 * 2);
1483 rbuf[2] = tmp >> (8 * 1);
1487 tmp = ATA_SECT_SIZE;
1492 /* sector count, 64-bit */
1493 rbuf[2] = n_sectors >> (8 * 7);
1494 rbuf[3] = n_sectors >> (8 * 6);
1495 rbuf[4] = n_sectors >> (8 * 5);
1496 rbuf[5] = n_sectors >> (8 * 4);
1497 rbuf[6] = tmp >> (8 * 3);
1498 rbuf[7] = tmp >> (8 * 2);
1499 rbuf[8] = tmp >> (8 * 1);
1503 tmp = ATA_SECT_SIZE;
1504 rbuf[12] = tmp >> 8;
1512 * ata_scsiop_report_luns - Simulate REPORT LUNS command
1513 * @args: device IDENTIFY data / SCSI command of interest.
1514 * @rbuf: Response buffer, to which simulated SCSI cmd output is sent.
1515 * @buflen: Response buffer length.
1517 * Simulate REPORT LUNS command.
1520 * spin_lock_irqsave(host_set lock)
1523 unsigned int ata_scsiop_report_luns(struct ata_scsi_args *args, u8 *rbuf,
1524 unsigned int buflen)
1527 rbuf[3] = 8; /* just one lun, LUN 0, size 8 bytes */
1533 * ata_scsi_badcmd - End a SCSI request with an error
1534 * @cmd: SCSI request to be handled
1535 * @done: SCSI command completion function
1536 * @asc: SCSI-defined additional sense code
1537 * @ascq: SCSI-defined additional sense code qualifier
1539 * Helper function that completes a SCSI command with
1540 * %SAM_STAT_CHECK_CONDITION, with a sense key %ILLEGAL_REQUEST
1541 * and the specified additional sense codes.
1544 * spin_lock_irqsave(host_set lock)
1547 void ata_scsi_badcmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *), u8 asc, u8 ascq)
1550 cmd->result = SAM_STAT_CHECK_CONDITION;
1552 cmd->sense_buffer[0] = 0x70;
1553 cmd->sense_buffer[2] = ILLEGAL_REQUEST;
1554 cmd->sense_buffer[7] = 14 - 8; /* addnl. sense len. FIXME: correct? */
1555 cmd->sense_buffer[12] = asc;
1556 cmd->sense_buffer[13] = ascq;
1561 static int atapi_qc_complete(struct ata_queued_cmd *qc, u8 drv_stat)
1563 struct scsi_cmnd *cmd = qc->scsicmd;
1565 if (unlikely(drv_stat & (ATA_ERR | ATA_BUSY | ATA_DRQ))) {
1566 DPRINTK("request check condition\n");
1568 cmd->result = SAM_STAT_CHECK_CONDITION;
1574 u8 *scsicmd = cmd->cmnd;
1576 if (scsicmd[0] == INQUIRY) {
1578 unsigned int buflen;
1580 buflen = ata_scsi_rbuf_get(cmd, &buf);
1582 buf[3] = (buf[3] & 0xf0) | 2;
1583 ata_scsi_rbuf_put(cmd, buf);
1585 cmd->result = SAM_STAT_GOOD;
1593 * atapi_xlat - Initialize PACKET taskfile
1594 * @qc: command structure to be initialized
1595 * @scsicmd: SCSI CDB associated with this PACKET command
1598 * spin_lock_irqsave(host_set lock)
1601 * Zero on success, non-zero on failure.
1604 static unsigned int atapi_xlat(struct ata_queued_cmd *qc, u8 *scsicmd)
1606 struct scsi_cmnd *cmd = qc->scsicmd;
1607 struct ata_device *dev = qc->dev;
1608 int using_pio = (dev->flags & ATA_DFLAG_PIO);
1609 int nodata = (cmd->sc_data_direction == SCSI_DATA_NONE);
1612 /* Check whether ATAPI DMA is safe */
1613 if (ata_check_atapi_dma(qc))
1616 memcpy(&qc->cdb, scsicmd, qc->ap->cdb_len);
1618 qc->complete_fn = atapi_qc_complete;
1620 qc->tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
1621 if (cmd->sc_data_direction == SCSI_DATA_WRITE) {
1622 qc->tf.flags |= ATA_TFLAG_WRITE;
1623 DPRINTK("direction: write\n");
1626 qc->tf.command = ATA_CMD_PACKET;
1628 /* no data, or PIO data xfer */
1629 if (using_pio || nodata) {
1631 qc->tf.protocol = ATA_PROT_ATAPI_NODATA;
1633 qc->tf.protocol = ATA_PROT_ATAPI;
1634 qc->tf.lbam = (8 * 1024) & 0xff;
1635 qc->tf.lbah = (8 * 1024) >> 8;
1640 qc->tf.protocol = ATA_PROT_ATAPI_DMA;
1641 qc->tf.feature |= ATAPI_PKT_DMA;
1643 #ifdef ATAPI_ENABLE_DMADIR
1644 /* some SATA bridges need us to indicate data xfer direction */
1645 if (cmd->sc_data_direction != SCSI_DATA_WRITE)
1646 qc->tf.feature |= ATAPI_DMADIR;
1650 qc->nbytes = cmd->bufflen;
1656 * ata_scsi_find_dev - lookup ata_device from scsi_cmnd
1657 * @ap: ATA port to which the device is attached
1658 * @scsidev: SCSI device from which we derive the ATA device
1660 * Given various information provided in struct scsi_cmnd,
1661 * map that onto an ATA bus, and using that mapping
1662 * determine which ata_device is associated with the
1663 * SCSI command to be sent.
1666 * spin_lock_irqsave(host_set lock)
1669 * Associated ATA device, or %NULL if not found.
1672 static struct ata_device *
1673 ata_scsi_find_dev(struct ata_port *ap, struct scsi_device *scsidev)
1675 struct ata_device *dev;
1677 /* skip commands not addressed to targets we simulate */
1678 if (likely(scsidev->id < ATA_MAX_DEVICES))
1679 dev = &ap->device[scsidev->id];
1683 if (unlikely((scsidev->channel != 0) ||
1684 (scsidev->lun != 0)))
1687 if (unlikely(!ata_dev_present(dev)))
1690 #ifndef ATA_ENABLE_ATAPI
1691 if (unlikely(dev->class == ATA_DEV_ATAPI))
1699 * ata_scsi_map_proto - Map pass-thru protocol value to taskfile value.
1700 * @byte1: Byte 1 from pass-thru CDB.
1703 * ATA_PROT_UNKNOWN if mapping failed/unimplemented, protocol otherwise.
1706 ata_scsi_map_proto(u8 byte1)
1708 switch((byte1 & 0x1e) >> 1) {
1709 case 3: /* Non-data */
1710 return ATA_PROT_NODATA;
1713 return ATA_PROT_DMA;
1715 case 4: /* PIO Data-in */
1716 case 5: /* PIO Data-out */
1718 return ATA_PROT_PIO_MULT;
1720 return ATA_PROT_PIO;
1722 case 10: /* Device Reset */
1723 case 0: /* Hard Reset */
1725 case 2: /* Bus Idle */
1726 case 7: /* Packet */
1727 case 8: /* DMA Queued */
1728 case 9: /* Device Diagnostic */
1729 case 11: /* UDMA Data-in */
1730 case 12: /* UDMA Data-Out */
1731 case 13: /* FPDMA */
1732 default: /* Reserved */
1736 return ATA_PROT_UNKNOWN;
1740 * ata_scsi_pass_thru - convert ATA pass-thru CDB to taskfile
1741 * @qc: command structure to be initialized
1742 * @cmd: SCSI command to convert
1744 * Handles either 12 or 16-byte versions of the CDB.
1747 * Zero on success, non-zero on failure.
1750 ata_scsi_pass_thru(struct ata_queued_cmd *qc, u8 *scsicmd)
1752 struct ata_taskfile *tf = &(qc->tf);
1753 struct scsi_cmnd *cmd = qc->scsicmd;
1755 if ((tf->protocol = ata_scsi_map_proto(scsicmd[1])) == ATA_PROT_UNKNOWN)
1759 * 12 and 16 byte CDBs use different offsets to
1760 * provide the various register values.
1762 if (scsicmd[0] == ATA_16) {
1764 * 16-byte CDB - may contain extended commands.
1766 * If that is the case, copy the upper byte register values.
1768 if (scsicmd[1] & 0x01) {
1769 tf->hob_feature = scsicmd[3];
1770 tf->hob_nsect = scsicmd[5];
1771 tf->hob_lbal = scsicmd[7];
1772 tf->hob_lbam = scsicmd[9];
1773 tf->hob_lbah = scsicmd[11];
1774 tf->flags |= ATA_TFLAG_LBA48;
1776 tf->flags &= ~ATA_TFLAG_LBA48;
1779 * Always copy low byte, device and command registers.
1781 tf->feature = scsicmd[4];
1782 tf->nsect = scsicmd[6];
1783 tf->lbal = scsicmd[8];
1784 tf->lbam = scsicmd[10];
1785 tf->lbah = scsicmd[12];
1786 tf->device = scsicmd[13];
1787 tf->command = scsicmd[14];
1790 * 12-byte CDB - incapable of extended commands.
1792 tf->flags &= ~ATA_TFLAG_LBA48;
1794 tf->feature = scsicmd[3];
1795 tf->nsect = scsicmd[4];
1796 tf->lbal = scsicmd[5];
1797 tf->lbam = scsicmd[6];
1798 tf->lbah = scsicmd[7];
1799 tf->device = scsicmd[8];
1800 tf->command = scsicmd[9];
1804 * Filter SET_FEATURES - XFER MODE command -- otherwise,
1805 * SET_FEATURES - XFER MODE must be preceded/succeeded
1806 * by an update to hardware-specific registers for each
1807 * controller (i.e. the reason for ->set_piomode(),
1808 * ->set_dmamode(), and ->post_set_mode() hooks).
1810 if ((tf->command == ATA_CMD_SET_FEATURES)
1811 && (tf->feature == SETFEATURES_XFER))
1815 * Set flags so that all registers will be written,
1816 * and pass on write indication (used for PIO/DMA
1819 tf->flags |= (ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE);
1821 if (cmd->sc_data_direction == SCSI_DATA_WRITE)
1822 tf->flags |= ATA_TFLAG_WRITE;
1825 * Set transfer length.
1827 * TODO: find out if we need to do more here to
1828 * cover scatter/gather case.
1830 qc->nsect = cmd->bufflen / ATA_SECT_SIZE;
1836 * ata_get_xlat_func - check if SCSI to ATA translation is possible
1838 * @cmd: SCSI command opcode to consider
1840 * Look up the SCSI command given, and determine whether the
1841 * SCSI command is to be translated or simulated.
1844 * Pointer to translation function if possible, %NULL if not.
1847 static inline ata_xlat_func_t ata_get_xlat_func(struct ata_device *dev, u8 cmd)
1857 return ata_scsi_rw_xlat;
1859 case SYNCHRONIZE_CACHE:
1860 if (ata_try_flush_cache(dev))
1861 return ata_scsi_flush_xlat;
1866 return ata_scsi_verify_xlat;
1870 return ata_scsi_pass_thru;
1877 * ata_scsi_dump_cdb - dump SCSI command contents to dmesg
1878 * @ap: ATA port to which the command was being sent
1879 * @cmd: SCSI command to dump
1881 * Prints the contents of a SCSI command via printk().
1884 static inline void ata_scsi_dump_cdb(struct ata_port *ap,
1885 struct scsi_cmnd *cmd)
1888 struct scsi_device *scsidev = cmd->device;
1889 u8 *scsicmd = cmd->cmnd;
1891 DPRINTK("CDB (%u:%d,%d,%d) %02x %02x %02x %02x %02x %02x %02x %02x %02x\n",
1893 scsidev->channel, scsidev->id, scsidev->lun,
1894 scsicmd[0], scsicmd[1], scsicmd[2], scsicmd[3],
1895 scsicmd[4], scsicmd[5], scsicmd[6], scsicmd[7],
1901 * ata_scsi_queuecmd - Issue SCSI cdb to libata-managed device
1902 * @cmd: SCSI command to be sent
1903 * @done: Completion function, called when command is complete
1905 * In some cases, this function translates SCSI commands into
1906 * ATA taskfiles, and queues the taskfiles to be sent to
1907 * hardware. In other cases, this function simulates a
1908 * SCSI device by evaluating and responding to certain
1909 * SCSI commands. This creates the overall effect of
1910 * ATA and ATAPI devices appearing as SCSI devices.
1913 * Releases scsi-layer-held lock, and obtains host_set lock.
1919 int ata_scsi_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *))
1921 struct ata_port *ap;
1922 struct ata_device *dev;
1923 struct scsi_device *scsidev = cmd->device;
1925 ap = (struct ata_port *) &scsidev->host->hostdata[0];
1927 ata_scsi_dump_cdb(ap, cmd);
1929 dev = ata_scsi_find_dev(ap, scsidev);
1930 if (unlikely(!dev)) {
1931 cmd->result = (DID_BAD_TARGET << 16);
1936 if (dev->class == ATA_DEV_ATA) {
1937 ata_xlat_func_t xlat_func = ata_get_xlat_func(dev,
1941 ata_scsi_translate(ap, dev, cmd, done, xlat_func);
1943 ata_scsi_simulate(dev->id, cmd, done);
1945 ata_scsi_translate(ap, dev, cmd, done, atapi_xlat);
1952 * ata_scsi_simulate - simulate SCSI command on ATA device
1953 * @id: current IDENTIFY data for target device.
1954 * @cmd: SCSI command being sent to device.
1955 * @done: SCSI command completion function.
1957 * Interprets and directly executes a select list of SCSI commands
1958 * that can be handled internally.
1961 * spin_lock_irqsave(host_set lock)
1964 void ata_scsi_simulate(u16 *id,
1965 struct scsi_cmnd *cmd,
1966 void (*done)(struct scsi_cmnd *))
1968 struct ata_scsi_args args;
1969 u8 *scsicmd = cmd->cmnd;
1975 switch(scsicmd[0]) {
1976 /* no-op's, complete with success */
1977 case SYNCHRONIZE_CACHE:
1981 case TEST_UNIT_READY:
1982 case FORMAT_UNIT: /* FIXME: correct? */
1983 case SEND_DIAGNOSTIC: /* FIXME: correct? */
1984 ata_scsi_rbuf_fill(&args, ata_scsiop_noop);
1988 if (scsicmd[1] & 2) /* is CmdDt set? */
1989 ata_bad_cdb(cmd, done);
1990 else if ((scsicmd[1] & 1) == 0) /* is EVPD clear? */
1991 ata_scsi_rbuf_fill(&args, ata_scsiop_inq_std);
1992 else if (scsicmd[2] == 0x00)
1993 ata_scsi_rbuf_fill(&args, ata_scsiop_inq_00);
1994 else if (scsicmd[2] == 0x80)
1995 ata_scsi_rbuf_fill(&args, ata_scsiop_inq_80);
1996 else if (scsicmd[2] == 0x83)
1997 ata_scsi_rbuf_fill(&args, ata_scsiop_inq_83);
1999 ata_bad_cdb(cmd, done);
2004 ata_scsi_rbuf_fill(&args, ata_scsiop_mode_sense);
2007 case MODE_SELECT: /* unconditionally return */
2008 case MODE_SELECT_10: /* bad-field-in-cdb */
2009 ata_bad_cdb(cmd, done);
2013 ata_scsi_rbuf_fill(&args, ata_scsiop_read_cap);
2016 case SERVICE_ACTION_IN:
2017 if ((scsicmd[1] & 0x1f) == SAI_READ_CAPACITY_16)
2018 ata_scsi_rbuf_fill(&args, ata_scsiop_read_cap);
2020 ata_bad_cdb(cmd, done);
2024 ata_scsi_rbuf_fill(&args, ata_scsiop_report_luns);
2027 /* mandatory commands we haven't implemented yet */
2030 /* all other commands */
2032 ata_bad_scsiop(cmd, done);