[libata] ATA passthru (arbitrary ATA command execution)
[linux-2.6] / drivers / scsi / libata-scsi.c
1 /*
2    libata-scsi.c - helper library for ATA
3
4    Copyright 2003-2004 Red Hat, Inc.  All rights reserved.
5    Copyright 2003-2004 Jeff Garzik
6
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
10    by reference.
11
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.
22
23  */
24
25 #include <linux/kernel.h>
26 #include <linux/blkdev.h>
27 #include <linux/spinlock.h>
28 #include <scsi/scsi.h>
29 #include "scsi.h"
30 #include <scsi/scsi_host.h>
31 #include <linux/libata.h>
32 #include <linux/hdreg.h>
33 #include <asm/uaccess.h>
34
35 #include "libata.h"
36
37 #define SECTOR_SIZE     512
38
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);
42
43
44 /**
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
50  *
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.
55  *
56  *      LOCKING:
57  *      Defined by the SCSI layer.  We don't really care.
58  *
59  *      RETURNS:
60  *      Zero.
61  */
62 int ata_std_bios_param(struct scsi_device *sdev, struct block_device *bdev,
63                        sector_t capacity, int geom[])
64 {
65         geom[0] = 255;
66         geom[1] = 63;
67         sector_div(capacity, 255*63);
68         geom[2] = capacity;
69
70         return 0;
71 }
72
73 /**
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
77  *
78  *      LOCKING:
79  *      Defined by the SCSI layer.  We don't really care.
80  *
81  *      RETURNS:
82  *      Zero on success, negative errno on error.
83  */
84
85 int ata_cmd_ioctl(struct scsi_device *scsidev, void __user *arg)
86 {
87         int rc = 0;
88         u8 scsi_cmd[MAX_COMMAND_SIZE];
89         u8 args[4], *argbuf = NULL;
90         int argsize = 0;
91         struct scsi_request *sreq;
92
93         if (NULL == (void *)arg)
94                 return -EINVAL;
95
96         if (copy_from_user(args, arg, sizeof(args)))
97                 return -EFAULT;
98
99         sreq = scsi_allocate_request(scsidev, GFP_KERNEL);
100         if (!sreq)
101                 return -EINTR;
102
103         memset(scsi_cmd, 0, sizeof(scsi_cmd));
104
105         if (args[3]) {
106                 argsize = SECTOR_SIZE * args[3];
107                 argbuf = kmalloc(argsize, GFP_KERNEL);
108                 if (argbuf == NULL)
109                         return -ENOMEM;
110
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;
115         } else {
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;
119         }
120
121         scsi_cmd[0] = ATA_16;
122
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];
127                 scsi_cmd[10] = 0x4f;
128                 scsi_cmd[12] = 0xc2;
129         } else {
130                 scsi_cmd[6]  = args[1];
131         }
132         scsi_cmd[14] = args[0];
133
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);
137
138         if (sreq->sr_result) {
139                 rc = -EIO;
140                 goto error;
141         }
142
143         /* Need code to retrieve data from check condition? */
144
145         if ((argbuf)
146          && copy_to_user((void *)(arg + sizeof(args)), argbuf, argsize))
147                 rc = -EFAULT;
148 error:
149         scsi_release_request(sreq);
150
151         if (argbuf)
152                 kfree(argbuf);
153
154         return rc;
155 }
156
157 /**
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
161  *
162  *      LOCKING:
163  *      Defined by the SCSI layer.  We don't really care.
164  *
165  *      RETURNS:
166  *      Zero on success, negative errno on error.
167  */
168 int ata_task_ioctl(struct scsi_device *scsidev, void __user *arg)
169 {
170         int rc = 0;
171         u8 scsi_cmd[MAX_COMMAND_SIZE];
172         u8 args[7];
173         struct scsi_request *sreq;
174
175         if (NULL == (void *)arg)
176                 return -EINVAL;
177
178         if (copy_from_user(args, arg, sizeof(args)))
179                 return -EFAULT;
180
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];
191
192         sreq = scsi_allocate_request(scsidev, GFP_KERNEL);
193         if (!sreq) {
194                 rc = -EINTR;
195                 goto error;
196         }
197
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);
202
203         if (sreq->sr_result) {
204                 rc = -EIO;
205                 goto error;
206         }
207
208         /* Need code to retrieve data from check condition? */
209
210 error:
211         scsi_release_request(sreq);
212         return rc;
213 }
214
215 int ata_scsi_ioctl(struct scsi_device *scsidev, int cmd, void __user *arg)
216 {
217         struct ata_port *ap;
218         struct ata_device *dev;
219         int val = -EINVAL, rc = -EINVAL;
220
221         ap = (struct ata_port *) &scsidev->host->hostdata[0];
222         if (!ap)
223                 goto out;
224
225         dev = ata_scsi_find_dev(ap, scsidev);
226         if (!dev) {
227                 rc = -ENODEV;
228                 goto out;
229         }
230
231         switch (cmd) {
232         case ATA_IOC_GET_IO32:
233                 val = 0;
234                 if (copy_to_user(arg, &val, 1))
235                         return -EFAULT;
236                 return 0;
237
238         case ATA_IOC_SET_IO32:
239                 val = (unsigned long) arg;
240                 if (val != 0)
241                         return -EINVAL;
242                 return 0;
243
244         case HDIO_DRIVE_CMD:
245                 if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO))
246                         return -EACCES;
247                 return ata_cmd_ioctl(scsidev, arg);
248
249         case HDIO_DRIVE_TASK:
250                 if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO))
251                         return -EACCES;
252                 return ata_task_ioctl(scsidev, arg);
253
254         default:
255                 rc = -ENOTTY;
256                 break;
257         }
258
259 out:
260         return rc;
261 }
262
263 /**
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
269  *
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.
273  *
274  *      If a command was available, fill in the SCSI-specific
275  *      portions of the structure with information on the
276  *      current command.
277  *
278  *      LOCKING:
279  *      spin_lock_irqsave(host_set lock)
280  *
281  *      RETURNS:
282  *      Command allocated, or %NULL if none available.
283  */
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 *))
288 {
289         struct ata_queued_cmd *qc;
290
291         qc = ata_qc_new_init(ap, dev);
292         if (qc) {
293                 qc->scsicmd = cmd;
294                 qc->scsidone = done;
295
296                 if (cmd->use_sg) {
297                         qc->sg = (struct scatterlist *) cmd->request_buffer;
298                         qc->n_elem = cmd->use_sg;
299                 } else {
300                         qc->sg = &qc->sgent;
301                         qc->n_elem = 1;
302                 }
303         } else {
304                 cmd->result = (DID_OK << 16) | (QUEUE_FULL << 1);
305                 done(cmd);
306         }
307
308         return qc;
309 }
310
311 /**
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
315  *
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.
319  *
320  *      LOCKING:
321  *      inherited from caller
322  */
323 void ata_dump_status(unsigned id, struct ata_taskfile *tf)
324 {
325         u8 stat = tf->command, err = tf->feature;
326
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 */
330         } else {
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 ");
338                 printk("}\n");
339
340                 if (err) {
341                         printk(KERN_WARNING "ata%u: error=0x%02x { ", id, err);
342                         if (err & 0x04)         printk("DriveStatusError ");
343                         if (err & 0x80) {
344                                 if (err & 0x04) printk("BadCRC ");
345                                 else            printk("Sector ");
346                         }
347                         if (err & 0x40)         printk("UncorrectableError ");
348                         if (err & 0x10)         printk("SectorIdNotFound ");
349                         if (err & 0x02)         printk("TrackZeroNotFound ");
350                         if (err & 0x01)         printk("AddrMarkNotFound ");
351                         printk("}\n");
352                 }
353         }
354 }
355
356 /**
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
363  *
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.
367  *
368  *      LOCKING:
369  *      spin_lock_irqsave(host_set lock)
370  */
371 void ata_to_sense_error(unsigned id, u8 drv_stat, u8 drv_err, u8 *sk, u8 *asc, 
372                         u8 *ascq)
373 {
374         int i;
375         /* Based on the 3ware driver translation table */
376         static unsigned char sense_table[][4] = {
377                 /* BBD|ECC|ID|MAR */
378                 {0xd1,          ABORTED_COMMAND, 0x00, 0x00},   // Device busy                  Aborted command
379                 /* BBD|ECC|ID */
380                 {0xd0,          ABORTED_COMMAND, 0x00, 0x00},   // Device busy                  Aborted command
381                 /* ECC|MC|MARK */
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
387                 /* MCR|MARK */
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
391                 /* TRK0 */
392                 {0x02,          HARDWARE_ERROR, 0x00, 0x00},    // Track 0 not found              Hardware error
393                 /* Abort & !ICRC */
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
397                 /* SRV */
398                 {0x10,          ABORTED_COMMAND, 0x14, 0x00},   // ID not found                 Recorded entity not found
399                 /* Media change */
400                 {0x08,          NOT_READY, 0x04, 0x00},         // Media change           FIXME: faking offline
401                 /* ECC */
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
406         };
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
414         };
415
416         /*
417          *      Is this an error we can process/parse
418          */
419         if (drv_stat & ATA_BUSY) {
420                 drv_err = 0;    /* Ignore the err bits, they're invalid */
421         }
422
423         if (drv_err) {
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) == 
428                             sense_table[i][0]) {
429                                 *sk = sense_table[i][1];
430                                 *asc = sense_table[i][2];
431                                 *ascq = sense_table[i][3];
432                                 goto translate_done;
433                         }
434                 }
435                 /* No immediate match */
436                 printk(KERN_WARNING "ata%u: no sense translation for "
437                        "error 0x%02x\n", id, drv_err);
438         }
439
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];
446                         goto translate_done;
447                 }
448         }
449         /* No error?  Undecoded? */
450         printk(KERN_WARNING "ata%u: no sense translation for status: 0x%02x\n", 
451                id, drv_stat);
452
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
455          * has failed.
456          */
457         *sk = MEDIUM_ERROR;
458         *asc = 0x11; /* "unrecovered read error" */
459         *ascq = 0x04; /*  "auto-reallocation failed" */
460
461  translate_done:
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,
464                *sk, *asc, *ascq);
465         return;
466 }
467
468 /*
469  *      ata_gen_ata_desc_sense - Generate check condition sense block.
470  *      @qc: Command that completed.
471  *
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.
477  *
478  *      LOCKING:
479  *      spin_lock_irqsave(host_set lock)
480  */
481 void ata_gen_ata_desc_sense(struct ata_queued_cmd *qc)
482 {
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;
487
488         memset(sb, 0, SCSI_SENSE_BUFFERSIZE);
489
490         cmd->result = SAM_STAT_CHECK_CONDITION;
491
492         /*
493          * Read the controller registers.
494          */
495         assert(NULL != qc->ap->ops->tf_read);
496         qc->ap->ops->tf_read(qc->ap, tf);
497
498         /*
499          * Use ata_to_sense_error() to map status register bits
500          * onto sense key, asc & ascq.
501          */
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]);
505                 sb[1] &= 0x0f;
506         }
507
508         /*
509          * Sense data is current and format is descriptor.
510          */
511         sb[0] = 0x72;
512
513         desc[0] = 0x09;
514
515         /*
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.
519          */
520         desc[1] = sb[7] = 14;
521
522         /*
523          * Copy registers into sense buffer.
524          */
525         desc[2] = 0x00;
526         desc[3] = tf->feature;  /* == error reg */
527         desc[5] = tf->nsect;
528         desc[7] = tf->lbal;
529         desc[9] = tf->lbam;
530         desc[11] = tf->lbah;
531         desc[12] = tf->device;
532         desc[13] = tf->command; /* == status reg */
533
534         /*
535          * Fill in Extend bit, and the high order bytes
536          * if applicable.
537          */
538         if (tf->flags & ATA_TFLAG_LBA48) {
539                 desc[2] |= 0x01;
540                 desc[4] = tf->hob_nsect;
541                 desc[6] = tf->hob_lbal;
542                 desc[8] = tf->hob_lbam;
543                 desc[10] = tf->hob_lbah;
544         }
545 }
546
547 /**
548  *      ata_gen_fixed_sense - generate a SCSI fixed sense block
549  *      @qc: Command that we are erroring out
550  *
551  *      Leverage ata_to_sense_error() to give us the codes.  Fit our
552  *      LBA in here if there's room.
553  *
554  *      LOCKING:
555  *      inherited from caller
556  */
557 void ata_gen_fixed_sense(struct ata_queued_cmd *qc)
558 {
559         struct scsi_cmnd *cmd = qc->scsicmd;
560         struct ata_taskfile *tf = &qc->tf;
561         unsigned char *sb = cmd->sense_buffer;
562
563         memset(sb, 0, SCSI_SENSE_BUFFERSIZE);
564
565         cmd->result = SAM_STAT_CHECK_CONDITION;
566
567         /*
568          * Read the controller registers.
569          */
570         assert(NULL != qc->ap->ops->tf_read);
571         qc->ap->ops->tf_read(qc->ap, tf);
572
573         /*
574          * Use ata_to_sense_error() to map status register bits
575          * onto sense key, asc & ascq.
576          */
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]);
580                 sb[2] &= 0x0f;
581         }
582
583         sb[0] = 0x70;
584         sb[7] = 0x0a;
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;
589                 sb[4] = tf->lbah;
590                 sb[5] = tf->lbam;
591                 sb[6] = tf->lbal;
592         }
593 }
594
595 /**
596  *      ata_scsi_slave_config - Set SCSI device attributes
597  *      @sdev: SCSI device to examine
598  *
599  *      This is called before we actually start reading
600  *      and writing to the device, to configure certain
601  *      SCSI mid-layer behaviors.
602  *
603  *      LOCKING:
604  *      Defined by SCSI layer.  We don't really care.
605  */
606
607 int ata_scsi_slave_config(struct scsi_device *sdev)
608 {
609         sdev->use_10_for_rw = 1;
610         sdev->use_10_for_ms = 1;
611
612         blk_queue_max_phys_segments(sdev->request_queue, LIBATA_MAX_PRD);
613
614         if (sdev->id < ATA_MAX_DEVICES) {
615                 struct ata_port *ap;
616                 struct ata_device *dev;
617
618                 ap = (struct ata_port *) &sdev->host->hostdata[0];
619                 dev = &ap->device[sdev->id];
620
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.
625                  */
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);
630                 }
631         }
632
633         return 0;       /* scsi layer doesn't check return value, sigh */
634 }
635
636 /**
637  *      ata_scsi_error - SCSI layer error handler callback
638  *      @host: SCSI host on which error occurred
639  *
640  *      Handles SCSI-layer-thrown error events.
641  *
642  *      LOCKING:
643  *      Inherited from SCSI layer (none, can sleep)
644  *
645  *      RETURNS:
646  *      Zero.
647  */
648
649 int ata_scsi_error(struct Scsi_Host *host)
650 {
651         struct ata_port *ap;
652
653         DPRINTK("ENTER\n");
654
655         ap = (struct ata_port *) &host->hostdata[0];
656         ap->ops->eng_timeout(ap);
657
658         /* TODO: this is per-command; when queueing is supported
659          * this code will either change or move to a more
660          * appropriate place
661          */
662         host->host_failed--;
663
664         DPRINTK("EXIT\n");
665         return 0;
666 }
667
668 /**
669  *      ata_scsi_flush_xlat - Translate SCSI SYNCHRONIZE CACHE command
670  *      @qc: Storage for translated ATA taskfile
671  *      @scsicmd: SCSI command to translate (ignored)
672  *
673  *      Sets up an ATA taskfile to issue FLUSH CACHE or
674  *      FLUSH CACHE EXT.
675  *
676  *      LOCKING:
677  *      spin_lock_irqsave(host_set lock)
678  *
679  *      RETURNS:
680  *      Zero on success, non-zero on error.
681  */
682
683 static unsigned int ata_scsi_flush_xlat(struct ata_queued_cmd *qc, u8 *scsicmd)
684 {
685         struct ata_taskfile *tf = &qc->tf;
686
687         tf->flags |= ATA_TFLAG_DEVICE;
688         tf->protocol = ATA_PROT_NODATA;
689
690         if ((tf->flags & ATA_TFLAG_LBA48) &&
691             (ata_id_has_flush_ext(qc->dev->id)))
692                 tf->command = ATA_CMD_FLUSH_EXT;
693         else
694                 tf->command = ATA_CMD_FLUSH;
695
696         return 0;
697 }
698
699 /**
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
703  *
704  *      Converts SCSI VERIFY command to an ATA READ VERIFY command.
705  *
706  *      LOCKING:
707  *      spin_lock_irqsave(host_set lock)
708  *
709  *      RETURNS:
710  *      Zero on success, non-zero on error.
711  */
712
713 static unsigned int ata_scsi_verify_xlat(struct ata_queued_cmd *qc, u8 *scsicmd)
714 {
715         struct ata_taskfile *tf = &qc->tf;
716         unsigned int lba48 = tf->flags & ATA_TFLAG_LBA48;
717         u64 dev_sectors = qc->dev->n_sectors;
718         u64 sect = 0;
719         u32 n_sect = 0;
720
721         tf->flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
722         tf->protocol = ATA_PROT_NODATA;
723         tf->device |= ATA_LBA;
724
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]);
730
731                 n_sect |= ((u32)scsicmd[7]) << 8;
732                 n_sect |= ((u32)scsicmd[8]);
733         }
734
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]);
744
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]);
749         }
750
751         else
752                 return 1;
753
754         if (!n_sect)
755                 return 1;
756         if (sect >= dev_sectors)
757                 return 1;
758         if ((sect + n_sect) > dev_sectors)
759                 return 1;
760         if (lba48) {
761                 if (n_sect > (64 * 1024))
762                         return 1;
763         } else {
764                 if (n_sect > 256)
765                         return 1;
766         }
767
768         if (lba48) {
769                 tf->command = ATA_CMD_VERIFY_EXT;
770
771                 tf->hob_nsect = (n_sect >> 8) & 0xff;
772
773                 tf->hob_lbah = (sect >> 40) & 0xff;
774                 tf->hob_lbam = (sect >> 32) & 0xff;
775                 tf->hob_lbal = (sect >> 24) & 0xff;
776         } else {
777                 tf->command = ATA_CMD_VERIFY;
778
779                 tf->device |= (sect >> 24) & 0xf;
780         }
781
782         tf->nsect = n_sect & 0xff;
783
784         tf->lbah = (sect >> 16) & 0xff;
785         tf->lbam = (sect >> 8) & 0xff;
786         tf->lbal = sect & 0xff;
787
788         return 0;
789 }
790
791 /**
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
795  *
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
799  *      support.
800  *
801  *      Commands %READ_6, %READ_10, %READ_16, %WRITE_6, %WRITE_10, and
802  *      %WRITE_16 are currently supported.
803  *
804  *      LOCKING:
805  *      spin_lock_irqsave(host_set lock)
806  *
807  *      RETURNS:
808  *      Zero on success, non-zero on error.
809  */
810
811 static unsigned int ata_scsi_rw_xlat(struct ata_queued_cmd *qc, u8 *scsicmd)
812 {
813         struct ata_taskfile *tf = &qc->tf;
814         unsigned int lba48 = tf->flags & ATA_TFLAG_LBA48;
815
816         tf->flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
817         tf->protocol = qc->dev->xfer_protocol;
818         tf->device |= ATA_LBA;
819
820         if (scsicmd[0] == READ_10 || scsicmd[0] == READ_6 ||
821             scsicmd[0] == READ_16) {
822                 tf->command = qc->dev->read_cmd;
823         } else {
824                 tf->command = qc->dev->write_cmd;
825                 tf->flags |= ATA_TFLAG_WRITE;
826         }
827
828         if (scsicmd[0] == READ_10 || scsicmd[0] == WRITE_10) {
829                 if (lba48) {
830                         tf->hob_nsect = scsicmd[7];
831                         tf->hob_lbal = scsicmd[2];
832
833                         qc->nsect = ((unsigned int)scsicmd[7] << 8) |
834                                         scsicmd[8];
835                 } else {
836                         /* if we don't support LBA48 addressing, the request
837                          * -may- be too large. */
838                         if ((scsicmd[2] & 0xf0) || scsicmd[7])
839                                 return 1;
840
841                         /* stores LBA27:24 in lower 4 bits of device reg */
842                         tf->device |= scsicmd[2];
843
844                         qc->nsect = scsicmd[8];
845                 }
846
847                 tf->nsect = scsicmd[8];
848                 tf->lbal = scsicmd[5];
849                 tf->lbam = scsicmd[4];
850                 tf->lbah = scsicmd[3];
851
852                 VPRINTK("ten-byte command\n");
853                 return 0;
854         }
855
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 */
861
862                 VPRINTK("six-byte command\n");
863                 return 0;
864         }
865
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])
869                         return 1;
870
871                 if (lba48) {
872                         tf->hob_nsect = scsicmd[12];
873                         tf->hob_lbal = scsicmd[6];
874                         tf->hob_lbam = scsicmd[5];
875                         tf->hob_lbah = scsicmd[4];
876
877                         qc->nsect = ((unsigned int)scsicmd[12] << 8) |
878                                         scsicmd[13];
879                 } else {
880                         /* once again, filter out impossible non-zero values */
881                         if (scsicmd[4] || scsicmd[5] || scsicmd[12] ||
882                             (scsicmd[6] & 0xf0))
883                                 return 1;
884
885                         /* stores LBA27:24 in lower 4 bits of device reg */
886                         tf->device |= scsicmd[6];
887
888                         qc->nsect = scsicmd[13];
889                 }
890
891                 tf->nsect = scsicmd[13];
892                 tf->lbal = scsicmd[9];
893                 tf->lbam = scsicmd[8];
894                 tf->lbah = scsicmd[7];
895
896                 VPRINTK("sixteen-byte command\n");
897                 return 0;
898         }
899
900         DPRINTK("no-byte command\n");
901         return 1;
902 }
903
904 static int ata_scsi_qc_complete(struct ata_queued_cmd *qc, u8 drv_stat)
905 {
906         struct scsi_cmnd *cmd = qc->scsicmd;
907         int need_sense = drv_stat & (ATA_ERR | ATA_BUSY | ATA_DRQ);
908
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.
915          */
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);
919         } else {
920                 if (!need_sense) {
921                         cmd->result = SAM_STAT_GOOD;
922                 } else {
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?)
927                          * devices.
928                          */
929                         ata_gen_fixed_sense(qc);
930                 }
931         }
932
933         if (need_sense) {
934                 /* The ata_gen_..._sense routines fill in tf */
935                 ata_dump_status(qc->ap->id, &qc->tf);
936         }
937
938         qc->scsidone(cmd);
939
940         return 0;
941 }
942
943 /**
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
950  *
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.
954  *
955  *      This function sets up an ata_queued_cmd structure for the
956  *      SCSI command, and sends that ata_queued_cmd to the hardware.
957  *
958  *      LOCKING:
959  *      spin_lock_irqsave(host_set lock)
960  */
961
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)
966 {
967         struct ata_queued_cmd *qc;
968         u8 *scsicmd = cmd->cmnd;
969
970         VPRINTK("ENTER\n");
971
972         qc = ata_scsi_qc_new(ap, dev, cmd, done);
973         if (!qc)
974                 return;
975
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",
981                                ap->id, dev->devno);
982                         goto err_out;
983                 }
984
985                 if (cmd->use_sg)
986                         ata_sg_init(qc, cmd->request_buffer, cmd->use_sg);
987                 else
988                         ata_sg_init_one(qc, cmd->request_buffer,
989                                         cmd->request_bufflen);
990
991                 qc->dma_dir = cmd->sc_data_direction;
992         }
993
994         qc->complete_fn = ata_scsi_qc_complete;
995
996         if (xlat_func(qc, scsicmd))
997                 goto err_out;
998         /* select device, send command to hardware */
999         if (ata_qc_issue(qc))
1000                 goto err_out;
1001
1002         VPRINTK("EXIT\n");
1003         return;
1004
1005 err_out:
1006         ata_qc_free(qc);
1007         ata_bad_cdb(cmd, done);
1008         DPRINTK("EXIT - badcmd\n");
1009 }
1010
1011 /**
1012  *      ata_scsi_rbuf_get - Map response buffer.
1013  *      @cmd: SCSI command containing buffer to be mapped.
1014  *      @buf_out: Pointer to mapped area.
1015  *
1016  *      Maps buffer contained within SCSI command @cmd.
1017  *
1018  *      LOCKING:
1019  *      spin_lock_irqsave(host_set lock)
1020  *
1021  *      RETURNS:
1022  *      Length of response buffer.
1023  */
1024
1025 static unsigned int ata_scsi_rbuf_get(struct scsi_cmnd *cmd, u8 **buf_out)
1026 {
1027         u8 *buf;
1028         unsigned int buflen;
1029
1030         if (cmd->use_sg) {
1031                 struct scatterlist *sg;
1032
1033                 sg = (struct scatterlist *) cmd->request_buffer;
1034                 buf = kmap_atomic(sg->page, KM_USER0) + sg->offset;
1035                 buflen = sg->length;
1036         } else {
1037                 buf = cmd->request_buffer;
1038                 buflen = cmd->request_bufflen;
1039         }
1040
1041         *buf_out = buf;
1042         return buflen;
1043 }
1044
1045 /**
1046  *      ata_scsi_rbuf_put - Unmap response buffer.
1047  *      @cmd: SCSI command containing buffer to be unmapped.
1048  *      @buf: buffer to unmap
1049  *
1050  *      Unmaps response buffer contained within @cmd.
1051  *
1052  *      LOCKING:
1053  *      spin_lock_irqsave(host_set lock)
1054  */
1055
1056 static inline void ata_scsi_rbuf_put(struct scsi_cmnd *cmd, u8 *buf)
1057 {
1058         if (cmd->use_sg) {
1059                 struct scatterlist *sg;
1060
1061                 sg = (struct scatterlist *) cmd->request_buffer;
1062                 kunmap_atomic(buf - sg->offset, KM_USER0);
1063         }
1064 }
1065
1066 /**
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
1070  *
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.
1076  *
1077  *      LOCKING:
1078  *      spin_lock_irqsave(host_set lock)
1079  */
1080
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))
1084 {
1085         u8 *rbuf;
1086         unsigned int buflen, rc;
1087         struct scsi_cmnd *cmd = args->cmd;
1088
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);
1093
1094         if (rc)
1095                 ata_bad_cdb(cmd, args->done);
1096         else {
1097                 cmd->result = SAM_STAT_GOOD;
1098                 args->done(cmd);
1099         }
1100 }
1101
1102 /**
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.
1107  *
1108  *      Returns standard device identification data associated
1109  *      with non-EVPD INQUIRY command output.
1110  *
1111  *      LOCKING:
1112  *      spin_lock_irqsave(host_set lock)
1113  */
1114
1115 unsigned int ata_scsiop_inq_std(struct ata_scsi_args *args, u8 *rbuf,
1116                                unsigned int buflen)
1117 {
1118         u8 hdr[] = {
1119                 TYPE_DISK,
1120                 0,
1121                 0x5,    /* claim SPC-3 version compatibility */
1122                 2,
1123                 95 - 4
1124         };
1125
1126         /* set scsi removeable (RMB) bit per ata bit */
1127         if (ata_id_removeable(args->id))
1128                 hdr[1] |= (1 << 7);
1129
1130         VPRINTK("ENTER\n");
1131
1132         memcpy(rbuf, hdr, sizeof(hdr));
1133
1134         if (buflen > 35) {
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);
1140         }
1141
1142         if (buflen > 63) {
1143                 const u8 versions[] = {
1144                         0x60,   /* SAM-3 (no version claimed) */
1145
1146                         0x03,
1147                         0x20,   /* SBC-2 (no version claimed) */
1148
1149                         0x02,
1150                         0x60    /* SPC-3 (no version claimed) */
1151                 };
1152
1153                 memcpy(rbuf + 59, versions, sizeof(versions));
1154         }
1155
1156         return 0;
1157 }
1158
1159 /**
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.
1164  *
1165  *      Returns list of inquiry EVPD pages available.
1166  *
1167  *      LOCKING:
1168  *      spin_lock_irqsave(host_set lock)
1169  */
1170
1171 unsigned int ata_scsiop_inq_00(struct ata_scsi_args *args, u8 *rbuf,
1172                               unsigned int buflen)
1173 {
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 */
1178         };
1179         rbuf[3] = sizeof(pages);        /* number of supported EVPD pages */
1180
1181         if (buflen > 6)
1182                 memcpy(rbuf + 4, pages, sizeof(pages));
1183
1184         return 0;
1185 }
1186
1187 /**
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.
1192  *
1193  *      Returns ATA device serial number.
1194  *
1195  *      LOCKING:
1196  *      spin_lock_irqsave(host_set lock)
1197  */
1198
1199 unsigned int ata_scsiop_inq_80(struct ata_scsi_args *args, u8 *rbuf,
1200                               unsigned int buflen)
1201 {
1202         const u8 hdr[] = {
1203                 0,
1204                 0x80,                   /* this page code */
1205                 0,
1206                 ATA_SERNO_LEN,          /* page len */
1207         };
1208         memcpy(rbuf, hdr, sizeof(hdr));
1209
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);
1213
1214         return 0;
1215 }
1216
1217 static const char *inq_83_str = "Linux ATA-SCSI simulator";
1218
1219 /**
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.
1224  *
1225  *      Returns device identification.  Currently hardcoded to
1226  *      return "Linux ATA-SCSI simulator".
1227  *
1228  *      LOCKING:
1229  *      spin_lock_irqsave(host_set lock)
1230  */
1231
1232 unsigned int ata_scsiop_inq_83(struct ata_scsi_args *args, u8 *rbuf,
1233                               unsigned int buflen)
1234 {
1235         rbuf[1] = 0x83;                 /* this page code */
1236         rbuf[3] = 4 + strlen(inq_83_str);       /* page len */
1237
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));
1243         }
1244
1245         return 0;
1246 }
1247
1248 /**
1249  *      ata_scsiop_noop -
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.
1253  *
1254  *      No operation.  Simply returns success to caller, to indicate
1255  *      that the caller should successfully complete this SCSI command.
1256  *
1257  *      LOCKING:
1258  *      spin_lock_irqsave(host_set lock)
1259  */
1260
1261 unsigned int ata_scsiop_noop(struct ata_scsi_args *args, u8 *rbuf,
1262                             unsigned int buflen)
1263 {
1264         VPRINTK("ENTER\n");
1265         return 0;
1266 }
1267
1268 /**
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
1274  *
1275  *      Store MODE SENSE data on an output buffer.
1276  *
1277  *      LOCKING:
1278  *      None.
1279  */
1280
1281 static void ata_msense_push(u8 **ptr_io, const u8 *last,
1282                             const u8 *buf, unsigned int buflen)
1283 {
1284         u8 *ptr = *ptr_io;
1285
1286         if ((ptr + buflen - 1) > last)
1287                 return;
1288
1289         memcpy(ptr, buf, buflen);
1290
1291         ptr += buflen;
1292
1293         *ptr_io = ptr;
1294 }
1295
1296 /**
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
1301  *
1302  *      Generate a caching info page, which conditionally indicates
1303  *      write caching to the SCSI layer, depending on device
1304  *      capabilities.
1305  *
1306  *      LOCKING:
1307  *      None.
1308  */
1309
1310 static unsigned int ata_msense_caching(u16 *id, u8 **ptr_io,
1311                                        const u8 *last)
1312 {
1313         u8 page[] = {
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 */
1318         };
1319
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 */
1324
1325         ata_msense_push(ptr_io, last, page, sizeof(page));
1326         return sizeof(page);
1327 }
1328
1329 /**
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
1334  *
1335  *      Generate a generic MODE SENSE control mode page.
1336  *
1337  *      LOCKING:
1338  *      None.
1339  */
1340
1341 static unsigned int ata_msense_ctl_mode(u8 **ptr_io, const u8 *last)
1342 {
1343         const u8 page[] = {0xa, 0xa, 6, 0, 0, 0, 0, 0, 0xff, 0xff, 0, 30};
1344
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.
1348          */
1349
1350         ata_msense_push(ptr_io, last, page, sizeof(page));
1351         return sizeof(page);
1352 }
1353
1354 /**
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
1359  *
1360  *      Generate a generic MODE SENSE r/w error recovery page.
1361  *
1362  *      LOCKING:
1363  *      None.
1364  */
1365
1366 static unsigned int ata_msense_rw_recovery(u8 **ptr_io, const u8 *last)
1367 {
1368         const u8 page[] = {
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 */
1373         };
1374
1375         ata_msense_push(ptr_io, last, page, sizeof(page));
1376         return sizeof(page);
1377 }
1378
1379 /**
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.
1384  *
1385  *      Simulate MODE SENSE commands.
1386  *
1387  *      LOCKING:
1388  *      spin_lock_irqsave(host_set lock)
1389  */
1390
1391 unsigned int ata_scsiop_mode_sense(struct ata_scsi_args *args, u8 *rbuf,
1392                                   unsigned int buflen)
1393 {
1394         u8 *scsicmd = args->cmd->cmnd, *p, *last;
1395         unsigned int page_control, six_byte, output_len;
1396
1397         VPRINTK("ENTER\n");
1398
1399         six_byte = (scsicmd[0] == MODE_SENSE);
1400
1401         /* we only support saved and current values (which we treat
1402          * in the same manner)
1403          */
1404         page_control = scsicmd[2] >> 6;
1405         if ((page_control != 0) && (page_control != 3))
1406                 return 1;
1407
1408         if (six_byte)
1409                 output_len = 4;
1410         else
1411                 output_len = 8;
1412
1413         p = rbuf + output_len;
1414         last = rbuf + buflen - 1;
1415
1416         switch(scsicmd[2] & 0x3f) {
1417         case 0x01:              /* r/w error recovery */
1418                 output_len += ata_msense_rw_recovery(&p, last);
1419                 break;
1420
1421         case 0x08:              /* caching */
1422                 output_len += ata_msense_caching(args->id, &p, last);
1423                 break;
1424
1425         case 0x0a: {            /* control mode */
1426                 output_len += ata_msense_ctl_mode(&p, last);
1427                 break;
1428                 }
1429
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);
1434                 break;
1435
1436         default:                /* invalid page code */
1437                 return 1;
1438         }
1439
1440         if (six_byte) {
1441                 output_len--;
1442                 rbuf[0] = output_len;
1443         } else {
1444                 output_len -= 2;
1445                 rbuf[0] = output_len >> 8;
1446                 rbuf[1] = output_len;
1447         }
1448
1449         return 0;
1450 }
1451
1452 /**
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.
1457  *
1458  *      Simulate READ CAPACITY commands.
1459  *
1460  *      LOCKING:
1461  *      spin_lock_irqsave(host_set lock)
1462  */
1463
1464 unsigned int ata_scsiop_read_cap(struct ata_scsi_args *args, u8 *rbuf,
1465                                 unsigned int buflen)
1466 {
1467         u64 n_sectors;
1468         u32 tmp;
1469
1470         VPRINTK("ENTER\n");
1471
1472         if (ata_id_has_lba48(args->id))
1473                 n_sectors = ata_id_u64(args->id, 100);
1474         else
1475                 n_sectors = ata_id_u32(args->id, 60);
1476         n_sectors--;            /* ATA TotalUserSectors - 1 */
1477
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);
1484                 rbuf[3] = tmp;
1485
1486                 /* sector size */
1487                 tmp = ATA_SECT_SIZE;
1488                 rbuf[6] = tmp >> 8;
1489                 rbuf[7] = tmp;
1490
1491         } else {
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);
1500                 rbuf[9] = tmp;
1501
1502                 /* sector size */
1503                 tmp = ATA_SECT_SIZE;
1504                 rbuf[12] = tmp >> 8;
1505                 rbuf[13] = tmp;
1506         }
1507
1508         return 0;
1509 }
1510
1511 /**
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.
1516  *
1517  *      Simulate REPORT LUNS command.
1518  *
1519  *      LOCKING:
1520  *      spin_lock_irqsave(host_set lock)
1521  */
1522
1523 unsigned int ata_scsiop_report_luns(struct ata_scsi_args *args, u8 *rbuf,
1524                                    unsigned int buflen)
1525 {
1526         VPRINTK("ENTER\n");
1527         rbuf[3] = 8;    /* just one lun, LUN 0, size 8 bytes */
1528
1529         return 0;
1530 }
1531
1532 /**
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
1538  *
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.
1542  *
1543  *      LOCKING:
1544  *      spin_lock_irqsave(host_set lock)
1545  */
1546
1547 void ata_scsi_badcmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *), u8 asc, u8 ascq)
1548 {
1549         DPRINTK("ENTER\n");
1550         cmd->result = SAM_STAT_CHECK_CONDITION;
1551
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;
1557
1558         done(cmd);
1559 }
1560
1561 static int atapi_qc_complete(struct ata_queued_cmd *qc, u8 drv_stat)
1562 {
1563         struct scsi_cmnd *cmd = qc->scsicmd;
1564
1565         if (unlikely(drv_stat & (ATA_ERR | ATA_BUSY | ATA_DRQ))) {
1566                 DPRINTK("request check condition\n");
1567
1568                 cmd->result = SAM_STAT_CHECK_CONDITION;
1569
1570                 qc->scsidone(cmd);
1571
1572                 return 1;
1573         } else {
1574                 u8 *scsicmd = cmd->cmnd;
1575
1576                 if (scsicmd[0] == INQUIRY) {
1577                         u8 *buf = NULL;
1578                         unsigned int buflen;
1579
1580                         buflen = ata_scsi_rbuf_get(cmd, &buf);
1581                         buf[2] = 0x5;
1582                         buf[3] = (buf[3] & 0xf0) | 2;
1583                         ata_scsi_rbuf_put(cmd, buf);
1584                 }
1585                 cmd->result = SAM_STAT_GOOD;
1586         }
1587
1588         qc->scsidone(cmd);
1589
1590         return 0;
1591 }
1592 /**
1593  *      atapi_xlat - Initialize PACKET taskfile
1594  *      @qc: command structure to be initialized
1595  *      @scsicmd: SCSI CDB associated with this PACKET command
1596  *
1597  *      LOCKING:
1598  *      spin_lock_irqsave(host_set lock)
1599  *
1600  *      RETURNS:
1601  *      Zero on success, non-zero on failure.
1602  */
1603
1604 static unsigned int atapi_xlat(struct ata_queued_cmd *qc, u8 *scsicmd)
1605 {
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);
1610
1611         if (!using_pio)
1612                 /* Check whether ATAPI DMA is safe */
1613                 if (ata_check_atapi_dma(qc))
1614                         using_pio = 1;
1615
1616         memcpy(&qc->cdb, scsicmd, qc->ap->cdb_len);
1617
1618         qc->complete_fn = atapi_qc_complete;
1619
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");
1624         }
1625
1626         qc->tf.command = ATA_CMD_PACKET;
1627
1628         /* no data, or PIO data xfer */
1629         if (using_pio || nodata) {
1630                 if (nodata)
1631                         qc->tf.protocol = ATA_PROT_ATAPI_NODATA;
1632                 else
1633                         qc->tf.protocol = ATA_PROT_ATAPI;
1634                 qc->tf.lbam = (8 * 1024) & 0xff;
1635                 qc->tf.lbah = (8 * 1024) >> 8;
1636         }
1637
1638         /* DMA data xfer */
1639         else {
1640                 qc->tf.protocol = ATA_PROT_ATAPI_DMA;
1641                 qc->tf.feature |= ATAPI_PKT_DMA;
1642
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;
1647 #endif
1648         }
1649
1650         qc->nbytes = cmd->bufflen;
1651
1652         return 0;
1653 }
1654
1655 /**
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
1659  *
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.
1664  *
1665  *      LOCKING:
1666  *      spin_lock_irqsave(host_set lock)
1667  *
1668  *      RETURNS:
1669  *      Associated ATA device, or %NULL if not found.
1670  */
1671
1672 static struct ata_device *
1673 ata_scsi_find_dev(struct ata_port *ap, struct scsi_device *scsidev)
1674 {
1675         struct ata_device *dev;
1676
1677         /* skip commands not addressed to targets we simulate */
1678         if (likely(scsidev->id < ATA_MAX_DEVICES))
1679                 dev = &ap->device[scsidev->id];
1680         else
1681                 return NULL;
1682
1683         if (unlikely((scsidev->channel != 0) ||
1684                      (scsidev->lun != 0)))
1685                 return NULL;
1686
1687         if (unlikely(!ata_dev_present(dev)))
1688                 return NULL;
1689
1690 #ifndef ATA_ENABLE_ATAPI
1691         if (unlikely(dev->class == ATA_DEV_ATAPI))
1692                 return NULL;
1693 #endif
1694
1695         return dev;
1696 }
1697
1698 /*
1699  *      ata_scsi_map_proto - Map pass-thru protocol value to taskfile value.
1700  *      @byte1: Byte 1 from pass-thru CDB.
1701  *
1702  *      RETURNS:
1703  *      ATA_PROT_UNKNOWN if mapping failed/unimplemented, protocol otherwise.
1704  */
1705 static u8
1706 ata_scsi_map_proto(u8 byte1)
1707 {
1708         switch((byte1 & 0x1e) >> 1) {
1709                 case 3:         /* Non-data */
1710                         return ATA_PROT_NODATA;
1711
1712                 case 6:         /* DMA */
1713                         return ATA_PROT_DMA;
1714
1715                 case 4:         /* PIO Data-in */
1716                 case 5:         /* PIO Data-out */
1717                         if (byte1 & 0xe0) {
1718                                 return ATA_PROT_PIO_MULT;
1719                         }
1720                         return ATA_PROT_PIO;
1721
1722                 case 10:        /* Device Reset */
1723                 case 0:         /* Hard Reset */
1724                 case 1:         /* SRST */
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 */
1733                         break;
1734         }
1735
1736         return ATA_PROT_UNKNOWN;
1737 }
1738
1739 /**
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
1743  *
1744  *      Handles either 12 or 16-byte versions of the CDB.
1745  *
1746  *      RETURNS:
1747  *      Zero on success, non-zero on failure.
1748  */
1749 static unsigned int
1750 ata_scsi_pass_thru(struct ata_queued_cmd *qc, u8 *scsicmd)
1751 {
1752         struct ata_taskfile *tf = &(qc->tf);
1753         struct scsi_cmnd *cmd = qc->scsicmd;
1754
1755         if ((tf->protocol = ata_scsi_map_proto(scsicmd[1])) == ATA_PROT_UNKNOWN)
1756                 return 1;
1757
1758         /*
1759          * 12 and 16 byte CDBs use different offsets to
1760          * provide the various register values.
1761          */
1762         if (scsicmd[0] == ATA_16) {
1763                 /*
1764                  * 16-byte CDB - may contain extended commands.
1765                  *
1766                  * If that is the case, copy the upper byte register values.
1767                  */
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;
1775                 } else
1776                         tf->flags &= ~ATA_TFLAG_LBA48;
1777
1778                 /*
1779                  * Always copy low byte, device and command registers.
1780                  */
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];
1788         } else {
1789                 /*
1790                  * 12-byte CDB - incapable of extended commands.
1791                  */
1792                 tf->flags &= ~ATA_TFLAG_LBA48;
1793
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];
1801         }
1802
1803         /*
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).
1809          */
1810         if ((tf->command == ATA_CMD_SET_FEATURES)
1811          && (tf->feature == SETFEATURES_XFER))
1812                 return 1;
1813
1814         /*
1815          * Set flags so that all registers will be written,
1816          * and pass on write indication (used for PIO/DMA
1817          * setup.)
1818          */
1819         tf->flags |= (ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE);
1820
1821         if (cmd->sc_data_direction == SCSI_DATA_WRITE)
1822                 tf->flags |= ATA_TFLAG_WRITE;
1823
1824         /*
1825          * Set transfer length.
1826          *
1827          * TODO: find out if we need to do more here to
1828          *       cover scatter/gather case.
1829          */
1830         qc->nsect = cmd->bufflen / ATA_SECT_SIZE;
1831
1832         return 0;
1833 }
1834
1835 /**
1836  *      ata_get_xlat_func - check if SCSI to ATA translation is possible
1837  *      @dev: ATA device
1838  *      @cmd: SCSI command opcode to consider
1839  *
1840  *      Look up the SCSI command given, and determine whether the
1841  *      SCSI command is to be translated or simulated.
1842  *
1843  *      RETURNS:
1844  *      Pointer to translation function if possible, %NULL if not.
1845  */
1846
1847 static inline ata_xlat_func_t ata_get_xlat_func(struct ata_device *dev, u8 cmd)
1848 {
1849         switch (cmd) {
1850         case READ_6:
1851         case READ_10:
1852         case READ_16:
1853
1854         case WRITE_6:
1855         case WRITE_10:
1856         case WRITE_16:
1857                 return ata_scsi_rw_xlat;
1858
1859         case SYNCHRONIZE_CACHE:
1860                 if (ata_try_flush_cache(dev))
1861                         return ata_scsi_flush_xlat;
1862                 break;
1863
1864         case VERIFY:
1865         case VERIFY_16:
1866                 return ata_scsi_verify_xlat;
1867
1868         case ATA_12:
1869         case ATA_16:
1870                 return ata_scsi_pass_thru;
1871         }
1872
1873         return NULL;
1874 }
1875
1876 /**
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
1880  *
1881  *      Prints the contents of a SCSI command via printk().
1882  */
1883
1884 static inline void ata_scsi_dump_cdb(struct ata_port *ap,
1885                                      struct scsi_cmnd *cmd)
1886 {
1887 #ifdef ATA_DEBUG
1888         struct scsi_device *scsidev = cmd->device;
1889         u8 *scsicmd = cmd->cmnd;
1890
1891         DPRINTK("CDB (%u:%d,%d,%d) %02x %02x %02x %02x %02x %02x %02x %02x %02x\n",
1892                 ap->id,
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],
1896                 scsicmd[8]);
1897 #endif
1898 }
1899
1900 /**
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
1904  *
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.
1911  *
1912  *      LOCKING:
1913  *      Releases scsi-layer-held lock, and obtains host_set lock.
1914  *
1915  *      RETURNS:
1916  *      Zero.
1917  */
1918
1919 int ata_scsi_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *))
1920 {
1921         struct ata_port *ap;
1922         struct ata_device *dev;
1923         struct scsi_device *scsidev = cmd->device;
1924
1925         ap = (struct ata_port *) &scsidev->host->hostdata[0];
1926
1927         ata_scsi_dump_cdb(ap, cmd);
1928
1929         dev = ata_scsi_find_dev(ap, scsidev);
1930         if (unlikely(!dev)) {
1931                 cmd->result = (DID_BAD_TARGET << 16);
1932                 done(cmd);
1933                 goto out_unlock;
1934         }
1935
1936         if (dev->class == ATA_DEV_ATA) {
1937                 ata_xlat_func_t xlat_func = ata_get_xlat_func(dev,
1938                                                               cmd->cmnd[0]);
1939
1940                 if (xlat_func)
1941                         ata_scsi_translate(ap, dev, cmd, done, xlat_func);
1942                 else
1943                         ata_scsi_simulate(dev->id, cmd, done);
1944         } else
1945                 ata_scsi_translate(ap, dev, cmd, done, atapi_xlat);
1946
1947 out_unlock:
1948         return 0;
1949 }
1950
1951 /**
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.
1956  *
1957  *      Interprets and directly executes a select list of SCSI commands
1958  *      that can be handled internally.
1959  *
1960  *      LOCKING:
1961  *      spin_lock_irqsave(host_set lock)
1962  */
1963
1964 void ata_scsi_simulate(u16 *id,
1965                       struct scsi_cmnd *cmd,
1966                       void (*done)(struct scsi_cmnd *))
1967 {
1968         struct ata_scsi_args args;
1969         u8 *scsicmd = cmd->cmnd;
1970
1971         args.id = id;
1972         args.cmd = cmd;
1973         args.done = done;
1974
1975         switch(scsicmd[0]) {
1976                 /* no-op's, complete with success */
1977                 case SYNCHRONIZE_CACHE:
1978                 case REZERO_UNIT:
1979                 case SEEK_6:
1980                 case SEEK_10:
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);
1985                         break;
1986
1987                 case INQUIRY:
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);
1998                         else
1999                                 ata_bad_cdb(cmd, done);
2000                         break;
2001
2002                 case MODE_SENSE:
2003                 case MODE_SENSE_10:
2004                         ata_scsi_rbuf_fill(&args, ata_scsiop_mode_sense);
2005                         break;
2006
2007                 case MODE_SELECT:       /* unconditionally return */
2008                 case MODE_SELECT_10:    /* bad-field-in-cdb */
2009                         ata_bad_cdb(cmd, done);
2010                         break;
2011
2012                 case READ_CAPACITY:
2013                         ata_scsi_rbuf_fill(&args, ata_scsiop_read_cap);
2014                         break;
2015
2016                 case SERVICE_ACTION_IN:
2017                         if ((scsicmd[1] & 0x1f) == SAI_READ_CAPACITY_16)
2018                                 ata_scsi_rbuf_fill(&args, ata_scsiop_read_cap);
2019                         else
2020                                 ata_bad_cdb(cmd, done);
2021                         break;
2022
2023                 case REPORT_LUNS:
2024                         ata_scsi_rbuf_fill(&args, ata_scsiop_report_luns);
2025                         break;
2026
2027                 /* mandatory commands we haven't implemented yet */
2028                 case REQUEST_SENSE:
2029
2030                 /* all other commands */
2031                 default:
2032                         ata_bad_scsiop(cmd, done);
2033                         break;
2034         }
2035 }
2036