libata: relocate and fix post-command processing
[safe/jmp/linux-2.6] / drivers / ata / libata-scsi.c
1 /*
2  *  libata-scsi.c - helper library for ATA
3  *
4  *  Maintained by:  Jeff Garzik <jgarzik@pobox.com>
5  *                  Please ALWAYS copy linux-ide@vger.kernel.org
6  *                  on emails.
7  *
8  *  Copyright 2003-2004 Red Hat, Inc.  All rights reserved.
9  *  Copyright 2003-2004 Jeff Garzik
10  *
11  *
12  *  This program is free software; you can redistribute it and/or modify
13  *  it under the terms of the GNU General Public License as published by
14  *  the Free Software Foundation; either version 2, or (at your option)
15  *  any later version.
16  *
17  *  This program is distributed in the hope that it will be useful,
18  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
19  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20  *  GNU General Public License for more details.
21  *
22  *  You should have received a copy of the GNU General Public License
23  *  along with this program; see the file COPYING.  If not, write to
24  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
25  *
26  *
27  *  libata documentation is available via 'make {ps|pdf}docs',
28  *  as Documentation/DocBook/libata.*
29  *
30  *  Hardware documentation available from
31  *  - http://www.t10.org/
32  *  - http://www.t13.org/
33  *
34  */
35
36 #include <linux/kernel.h>
37 #include <linux/blkdev.h>
38 #include <linux/spinlock.h>
39 #include <scsi/scsi.h>
40 #include <scsi/scsi_host.h>
41 #include <scsi/scsi_cmnd.h>
42 #include <scsi/scsi_eh.h>
43 #include <scsi/scsi_device.h>
44 #include <scsi/scsi_tcq.h>
45 #include <scsi/scsi_transport.h>
46 #include <linux/libata.h>
47 #include <linux/hdreg.h>
48 #include <linux/uaccess.h>
49
50 #include "libata.h"
51
52 #define SECTOR_SIZE     512
53
54 typedef unsigned int (*ata_xlat_func_t)(struct ata_queued_cmd *qc);
55
56 static struct ata_device *__ata_scsi_find_dev(struct ata_port *ap,
57                                         const struct scsi_device *scsidev);
58 static struct ata_device *ata_scsi_find_dev(struct ata_port *ap,
59                                             const struct scsi_device *scsidev);
60 static int ata_scsi_user_scan(struct Scsi_Host *shost, unsigned int channel,
61                               unsigned int id, unsigned int lun);
62
63
64 #define RW_RECOVERY_MPAGE 0x1
65 #define RW_RECOVERY_MPAGE_LEN 12
66 #define CACHE_MPAGE 0x8
67 #define CACHE_MPAGE_LEN 20
68 #define CONTROL_MPAGE 0xa
69 #define CONTROL_MPAGE_LEN 12
70 #define ALL_MPAGES 0x3f
71 #define ALL_SUB_MPAGES 0xff
72
73
74 static const u8 def_rw_recovery_mpage[RW_RECOVERY_MPAGE_LEN] = {
75         RW_RECOVERY_MPAGE,
76         RW_RECOVERY_MPAGE_LEN - 2,
77         (1 << 7),       /* AWRE */
78         0,              /* read retry count */
79         0, 0, 0, 0,
80         0,              /* write retry count */
81         0, 0, 0
82 };
83
84 static const u8 def_cache_mpage[CACHE_MPAGE_LEN] = {
85         CACHE_MPAGE,
86         CACHE_MPAGE_LEN - 2,
87         0,              /* contains WCE, needs to be 0 for logic */
88         0, 0, 0, 0, 0, 0, 0, 0, 0,
89         0,              /* contains DRA, needs to be 0 for logic */
90         0, 0, 0, 0, 0, 0, 0
91 };
92
93 static const u8 def_control_mpage[CONTROL_MPAGE_LEN] = {
94         CONTROL_MPAGE,
95         CONTROL_MPAGE_LEN - 2,
96         2,      /* DSENSE=0, GLTSD=1 */
97         0,      /* [QAM+QERR may be 1, see 05-359r1] */
98         0, 0, 0, 0, 0xff, 0xff,
99         0, 30   /* extended self test time, see 05-359r1 */
100 };
101
102 /*
103  * libata transport template.  libata doesn't do real transport stuff.
104  * It just needs the eh_timed_out hook.
105  */
106 static struct scsi_transport_template ata_scsi_transport_template = {
107         .eh_strategy_handler    = ata_scsi_error,
108         .eh_timed_out           = ata_scsi_timed_out,
109         .user_scan              = ata_scsi_user_scan,
110 };
111
112
113 static void ata_scsi_invalid_field(struct scsi_cmnd *cmd,
114                                    void (*done)(struct scsi_cmnd *))
115 {
116         ata_scsi_set_sense(cmd, ILLEGAL_REQUEST, 0x24, 0x0);
117         /* "Invalid field in cbd" */
118         done(cmd);
119 }
120
121 /**
122  *      ata_std_bios_param - generic bios head/sector/cylinder calculator used by sd.
123  *      @sdev: SCSI device for which BIOS geometry is to be determined
124  *      @bdev: block device associated with @sdev
125  *      @capacity: capacity of SCSI device
126  *      @geom: location to which geometry will be output
127  *
128  *      Generic bios head/sector/cylinder calculator
129  *      used by sd. Most BIOSes nowadays expect a XXX/255/16  (CHS)
130  *      mapping. Some situations may arise where the disk is not
131  *      bootable if this is not used.
132  *
133  *      LOCKING:
134  *      Defined by the SCSI layer.  We don't really care.
135  *
136  *      RETURNS:
137  *      Zero.
138  */
139 int ata_std_bios_param(struct scsi_device *sdev, struct block_device *bdev,
140                        sector_t capacity, int geom[])
141 {
142         geom[0] = 255;
143         geom[1] = 63;
144         sector_div(capacity, 255*63);
145         geom[2] = capacity;
146
147         return 0;
148 }
149
150 /**
151  *      ata_get_identity - Handler for HDIO_GET_IDENTITY ioctl
152  *      @sdev: SCSI device to get identify data for
153  *      @arg: User buffer area for identify data
154  *
155  *      LOCKING:
156  *      Defined by the SCSI layer.  We don't really care.
157  *
158  *      RETURNS:
159  *      Zero on success, negative errno on error.
160  */
161 static int ata_get_identity(struct scsi_device *sdev, void __user *arg)
162 {
163         struct ata_port *ap = ata_shost_to_port(sdev->host);
164         struct ata_device *dev = ata_scsi_find_dev(ap, sdev);
165         u16 __user *dst = arg;
166         char buf[40];
167
168         if (!dev)
169                 return -ENOMSG;
170
171         if (copy_to_user(dst, dev->id, ATA_ID_WORDS * sizeof(u16)))
172                 return -EFAULT;
173
174         ata_id_string(dev->id, buf, ATA_ID_PROD, ATA_ID_PROD_LEN);
175         if (copy_to_user(dst + ATA_ID_PROD, buf, ATA_ID_PROD_LEN))
176                 return -EFAULT;
177
178         ata_id_string(dev->id, buf, ATA_ID_FW_REV, ATA_ID_FW_REV_LEN);
179         if (copy_to_user(dst + ATA_ID_FW_REV, buf, ATA_ID_FW_REV_LEN))
180                 return -EFAULT;
181
182         ata_id_string(dev->id, buf, ATA_ID_SERNO, ATA_ID_SERNO_LEN);
183         if (copy_to_user(dst + ATA_ID_SERNO, buf, ATA_ID_SERNO_LEN))
184                 return -EFAULT;
185
186         return 0;
187 }
188
189 /**
190  *      ata_cmd_ioctl - Handler for HDIO_DRIVE_CMD ioctl
191  *      @scsidev: Device to which we are issuing command
192  *      @arg: User provided data for issuing command
193  *
194  *      LOCKING:
195  *      Defined by the SCSI layer.  We don't really care.
196  *
197  *      RETURNS:
198  *      Zero on success, negative errno on error.
199  */
200 int ata_cmd_ioctl(struct scsi_device *scsidev, void __user *arg)
201 {
202         int rc = 0;
203         u8 scsi_cmd[MAX_COMMAND_SIZE];
204         u8 args[4], *argbuf = NULL, *sensebuf = NULL;
205         int argsize = 0;
206         enum dma_data_direction data_dir;
207         int cmd_result;
208
209         if (arg == NULL)
210                 return -EINVAL;
211
212         if (copy_from_user(args, arg, sizeof(args)))
213                 return -EFAULT;
214
215         sensebuf = kzalloc(SCSI_SENSE_BUFFERSIZE, GFP_NOIO);
216         if (!sensebuf)
217                 return -ENOMEM;
218
219         memset(scsi_cmd, 0, sizeof(scsi_cmd));
220
221         if (args[3]) {
222                 argsize = SECTOR_SIZE * args[3];
223                 argbuf = kmalloc(argsize, GFP_KERNEL);
224                 if (argbuf == NULL) {
225                         rc = -ENOMEM;
226                         goto error;
227                 }
228
229                 scsi_cmd[1]  = (4 << 1); /* PIO Data-in */
230                 scsi_cmd[2]  = 0x0e;     /* no off.line or cc, read from dev,
231                                             block count in sector count field */
232                 data_dir = DMA_FROM_DEVICE;
233         } else {
234                 scsi_cmd[1]  = (3 << 1); /* Non-data */
235                 scsi_cmd[2]  = 0x20;     /* cc but no off.line or data xfer */
236                 data_dir = DMA_NONE;
237         }
238
239         scsi_cmd[0] = ATA_16;
240
241         scsi_cmd[4] = args[2];
242         if (args[0] == WIN_SMART) { /* hack -- ide driver does this too... */
243                 scsi_cmd[6]  = args[3];
244                 scsi_cmd[8]  = args[1];
245                 scsi_cmd[10] = 0x4f;
246                 scsi_cmd[12] = 0xc2;
247         } else {
248                 scsi_cmd[6]  = args[1];
249         }
250         scsi_cmd[14] = args[0];
251
252         /* Good values for timeout and retries?  Values below
253            from scsi_ioctl_send_command() for default case... */
254         cmd_result = scsi_execute(scsidev, scsi_cmd, data_dir, argbuf, argsize,
255                                   sensebuf, (10*HZ), 5, 0);
256
257         if (driver_byte(cmd_result) == DRIVER_SENSE) {/* sense data available */
258                 u8 *desc = sensebuf + 8;
259                 cmd_result &= ~(0xFF<<24); /* DRIVER_SENSE is not an error */
260
261                 /* If we set cc then ATA pass-through will cause a
262                  * check condition even if no error. Filter that. */
263                 if (cmd_result & SAM_STAT_CHECK_CONDITION) {
264                         struct scsi_sense_hdr sshdr;
265                         scsi_normalize_sense(sensebuf, SCSI_SENSE_BUFFERSIZE,
266                                              &sshdr);
267                         if (sshdr.sense_key == 0 &&
268                             sshdr.asc == 0 && sshdr.ascq == 0)
269                                 cmd_result &= ~SAM_STAT_CHECK_CONDITION;
270                 }
271
272                 /* Send userspace a few ATA registers (same as drivers/ide) */
273                 if (sensebuf[0] == 0x72 &&      /* format is "descriptor" */
274                     desc[0] == 0x09) {          /* code is "ATA Descriptor" */
275                         args[0] = desc[13];     /* status */
276                         args[1] = desc[3];      /* error */
277                         args[2] = desc[5];      /* sector count (0:7) */
278                         if (copy_to_user(arg, args, sizeof(args)))
279                                 rc = -EFAULT;
280                 }
281         }
282
283
284         if (cmd_result) {
285                 rc = -EIO;
286                 goto error;
287         }
288
289         if ((argbuf)
290          && copy_to_user(arg + sizeof(args), argbuf, argsize))
291                 rc = -EFAULT;
292 error:
293         kfree(sensebuf);
294         kfree(argbuf);
295         return rc;
296 }
297
298 /**
299  *      ata_task_ioctl - Handler for HDIO_DRIVE_TASK ioctl
300  *      @scsidev: Device to which we are issuing command
301  *      @arg: User provided data for issuing command
302  *
303  *      LOCKING:
304  *      Defined by the SCSI layer.  We don't really care.
305  *
306  *      RETURNS:
307  *      Zero on success, negative errno on error.
308  */
309 int ata_task_ioctl(struct scsi_device *scsidev, void __user *arg)
310 {
311         int rc = 0;
312         u8 scsi_cmd[MAX_COMMAND_SIZE];
313         u8 args[7], *sensebuf = NULL;
314         int cmd_result;
315
316         if (arg == NULL)
317                 return -EINVAL;
318
319         if (copy_from_user(args, arg, sizeof(args)))
320                 return -EFAULT;
321
322         sensebuf = kzalloc(SCSI_SENSE_BUFFERSIZE, GFP_NOIO);
323         if (!sensebuf)
324                 return -ENOMEM;
325
326         memset(scsi_cmd, 0, sizeof(scsi_cmd));
327         scsi_cmd[0]  = ATA_16;
328         scsi_cmd[1]  = (3 << 1); /* Non-data */
329         scsi_cmd[2]  = 0x20;     /* cc but no off.line or data xfer */
330         scsi_cmd[4]  = args[1];
331         scsi_cmd[6]  = args[2];
332         scsi_cmd[8]  = args[3];
333         scsi_cmd[10] = args[4];
334         scsi_cmd[12] = args[5];
335         scsi_cmd[13] = args[6] & 0x4f;
336         scsi_cmd[14] = args[0];
337
338         /* Good values for timeout and retries?  Values below
339            from scsi_ioctl_send_command() for default case... */
340         cmd_result = scsi_execute(scsidev, scsi_cmd, DMA_NONE, NULL, 0,
341                                 sensebuf, (10*HZ), 5, 0);
342
343         if (driver_byte(cmd_result) == DRIVER_SENSE) {/* sense data available */
344                 u8 *desc = sensebuf + 8;
345                 cmd_result &= ~(0xFF<<24); /* DRIVER_SENSE is not an error */
346
347                 /* If we set cc then ATA pass-through will cause a
348                  * check condition even if no error. Filter that. */
349                 if (cmd_result & SAM_STAT_CHECK_CONDITION) {
350                         struct scsi_sense_hdr sshdr;
351                         scsi_normalize_sense(sensebuf, SCSI_SENSE_BUFFERSIZE,
352                                                 &sshdr);
353                         if (sshdr.sense_key == 0 &&
354                                 sshdr.asc == 0 && sshdr.ascq == 0)
355                                 cmd_result &= ~SAM_STAT_CHECK_CONDITION;
356                 }
357
358                 /* Send userspace ATA registers */
359                 if (sensebuf[0] == 0x72 &&      /* format is "descriptor" */
360                                 desc[0] == 0x09) {/* code is "ATA Descriptor" */
361                         args[0] = desc[13];     /* status */
362                         args[1] = desc[3];      /* error */
363                         args[2] = desc[5];      /* sector count (0:7) */
364                         args[3] = desc[7];      /* lbal */
365                         args[4] = desc[9];      /* lbam */
366                         args[5] = desc[11];     /* lbah */
367                         args[6] = desc[12];     /* select */
368                         if (copy_to_user(arg, args, sizeof(args)))
369                                 rc = -EFAULT;
370                 }
371         }
372
373         if (cmd_result) {
374                 rc = -EIO;
375                 goto error;
376         }
377
378  error:
379         kfree(sensebuf);
380         return rc;
381 }
382
383 int ata_scsi_ioctl(struct scsi_device *scsidev, int cmd, void __user *arg)
384 {
385         int val = -EINVAL, rc = -EINVAL;
386
387         switch (cmd) {
388         case ATA_IOC_GET_IO32:
389                 val = 0;
390                 if (copy_to_user(arg, &val, 1))
391                         return -EFAULT;
392                 return 0;
393
394         case ATA_IOC_SET_IO32:
395                 val = (unsigned long) arg;
396                 if (val != 0)
397                         return -EINVAL;
398                 return 0;
399
400         case HDIO_GET_IDENTITY:
401                 return ata_get_identity(scsidev, arg);
402
403         case HDIO_DRIVE_CMD:
404                 if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO))
405                         return -EACCES;
406                 return ata_cmd_ioctl(scsidev, arg);
407
408         case HDIO_DRIVE_TASK:
409                 if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO))
410                         return -EACCES;
411                 return ata_task_ioctl(scsidev, arg);
412
413         default:
414                 rc = -ENOTTY;
415                 break;
416         }
417
418         return rc;
419 }
420
421 /**
422  *      ata_scsi_qc_new - acquire new ata_queued_cmd reference
423  *      @dev: ATA device to which the new command is attached
424  *      @cmd: SCSI command that originated this ATA command
425  *      @done: SCSI command completion function
426  *
427  *      Obtain a reference to an unused ata_queued_cmd structure,
428  *      which is the basic libata structure representing a single
429  *      ATA command sent to the hardware.
430  *
431  *      If a command was available, fill in the SCSI-specific
432  *      portions of the structure with information on the
433  *      current command.
434  *
435  *      LOCKING:
436  *      spin_lock_irqsave(host lock)
437  *
438  *      RETURNS:
439  *      Command allocated, or %NULL if none available.
440  */
441 static struct ata_queued_cmd *ata_scsi_qc_new(struct ata_device *dev,
442                                               struct scsi_cmnd *cmd,
443                                               void (*done)(struct scsi_cmnd *))
444 {
445         struct ata_queued_cmd *qc;
446
447         qc = ata_qc_new_init(dev);
448         if (qc) {
449                 qc->scsicmd = cmd;
450                 qc->scsidone = done;
451
452                 qc->__sg = scsi_sglist(cmd);
453                 qc->n_elem = scsi_sg_count(cmd);
454         } else {
455                 cmd->result = (DID_OK << 16) | (QUEUE_FULL << 1);
456                 done(cmd);
457         }
458
459         return qc;
460 }
461
462 /**
463  *      ata_dump_status - user friendly display of error info
464  *      @id: id of the port in question
465  *      @tf: ptr to filled out taskfile
466  *
467  *      Decode and dump the ATA error/status registers for the user so
468  *      that they have some idea what really happened at the non
469  *      make-believe layer.
470  *
471  *      LOCKING:
472  *      inherited from caller
473  */
474 static void ata_dump_status(unsigned id, struct ata_taskfile *tf)
475 {
476         u8 stat = tf->command, err = tf->feature;
477
478         printk(KERN_WARNING "ata%u: status=0x%02x { ", id, stat);
479         if (stat & ATA_BUSY) {
480                 printk("Busy }\n");     /* Data is not valid in this case */
481         } else {
482                 if (stat & 0x40)        printk("DriveReady ");
483                 if (stat & 0x20)        printk("DeviceFault ");
484                 if (stat & 0x10)        printk("SeekComplete ");
485                 if (stat & 0x08)        printk("DataRequest ");
486                 if (stat & 0x04)        printk("CorrectedError ");
487                 if (stat & 0x02)        printk("Index ");
488                 if (stat & 0x01)        printk("Error ");
489                 printk("}\n");
490
491                 if (err) {
492                         printk(KERN_WARNING "ata%u: error=0x%02x { ", id, err);
493                         if (err & 0x04)         printk("DriveStatusError ");
494                         if (err & 0x80) {
495                                 if (err & 0x04) printk("BadCRC ");
496                                 else            printk("Sector ");
497                         }
498                         if (err & 0x40)         printk("UncorrectableError ");
499                         if (err & 0x10)         printk("SectorIdNotFound ");
500                         if (err & 0x02)         printk("TrackZeroNotFound ");
501                         if (err & 0x01)         printk("AddrMarkNotFound ");
502                         printk("}\n");
503                 }
504         }
505 }
506
507 /**
508  *      ata_to_sense_error - convert ATA error to SCSI error
509  *      @id: ATA device number
510  *      @drv_stat: value contained in ATA status register
511  *      @drv_err: value contained in ATA error register
512  *      @sk: the sense key we'll fill out
513  *      @asc: the additional sense code we'll fill out
514  *      @ascq: the additional sense code qualifier we'll fill out
515  *      @verbose: be verbose
516  *
517  *      Converts an ATA error into a SCSI error.  Fill out pointers to
518  *      SK, ASC, and ASCQ bytes for later use in fixed or descriptor
519  *      format sense blocks.
520  *
521  *      LOCKING:
522  *      spin_lock_irqsave(host lock)
523  */
524 static void ata_to_sense_error(unsigned id, u8 drv_stat, u8 drv_err, u8 *sk,
525                                u8 *asc, u8 *ascq, int verbose)
526 {
527         int i;
528
529         /* Based on the 3ware driver translation table */
530         static const unsigned char sense_table[][4] = {
531                 /* BBD|ECC|ID|MAR */
532                 {0xd1,          ABORTED_COMMAND, 0x00, 0x00},   // Device busy                  Aborted command
533                 /* BBD|ECC|ID */
534                 {0xd0,          ABORTED_COMMAND, 0x00, 0x00},   // Device busy                  Aborted command
535                 /* ECC|MC|MARK */
536                 {0x61,          HARDWARE_ERROR, 0x00, 0x00},    // Device fault                 Hardware error
537                 /* ICRC|ABRT */         /* NB: ICRC & !ABRT is BBD */
538                 {0x84,          ABORTED_COMMAND, 0x47, 0x00},   // Data CRC error               SCSI parity error
539                 /* MC|ID|ABRT|TRK0|MARK */
540                 {0x37,          NOT_READY, 0x04, 0x00},         // Unit offline                 Not ready
541                 /* MCR|MARK */
542                 {0x09,          NOT_READY, 0x04, 0x00},         // Unrecovered disk error       Not ready
543                 /*  Bad address mark */
544                 {0x01,          MEDIUM_ERROR, 0x13, 0x00},      // Address mark not found       Address mark not found for data field
545                 /* TRK0 */
546                 {0x02,          HARDWARE_ERROR, 0x00, 0x00},    // Track 0 not found              Hardware error
547                 /* Abort & !ICRC */
548                 {0x04,          ABORTED_COMMAND, 0x00, 0x00},   // Aborted command              Aborted command
549                 /* Media change request */
550                 {0x08,          NOT_READY, 0x04, 0x00},         // Media change request   FIXME: faking offline
551                 /* SRV */
552                 {0x10,          ABORTED_COMMAND, 0x14, 0x00},   // ID not found                 Recorded entity not found
553                 /* Media change */
554                 {0x08,          NOT_READY, 0x04, 0x00},         // Media change           FIXME: faking offline
555                 /* ECC */
556                 {0x40,          MEDIUM_ERROR, 0x11, 0x04},      // Uncorrectable ECC error      Unrecovered read error
557                 /* BBD - block marked bad */
558                 {0x80,          MEDIUM_ERROR, 0x11, 0x04},      // Block marked bad               Medium error, unrecovered read error
559                 {0xFF, 0xFF, 0xFF, 0xFF}, // END mark
560         };
561         static const unsigned char stat_table[][4] = {
562                 /* Must be first because BUSY means no other bits valid */
563                 {0x80,          ABORTED_COMMAND, 0x47, 0x00},   // Busy, fake parity for now
564                 {0x20,          HARDWARE_ERROR,  0x00, 0x00},   // Device fault
565                 {0x08,          ABORTED_COMMAND, 0x47, 0x00},   // Timed out in xfer, fake parity for now
566                 {0x04,          RECOVERED_ERROR, 0x11, 0x00},   // Recovered ECC error    Medium error, recovered
567                 {0xFF, 0xFF, 0xFF, 0xFF}, // END mark
568         };
569
570         /*
571          *      Is this an error we can process/parse
572          */
573         if (drv_stat & ATA_BUSY) {
574                 drv_err = 0;    /* Ignore the err bits, they're invalid */
575         }
576
577         if (drv_err) {
578                 /* Look for drv_err */
579                 for (i = 0; sense_table[i][0] != 0xFF; i++) {
580                         /* Look for best matches first */
581                         if ((sense_table[i][0] & drv_err) ==
582                             sense_table[i][0]) {
583                                 *sk = sense_table[i][1];
584                                 *asc = sense_table[i][2];
585                                 *ascq = sense_table[i][3];
586                                 goto translate_done;
587                         }
588                 }
589                 /* No immediate match */
590                 if (verbose)
591                         printk(KERN_WARNING "ata%u: no sense translation for "
592                                "error 0x%02x\n", id, drv_err);
593         }
594
595         /* Fall back to interpreting status bits */
596         for (i = 0; stat_table[i][0] != 0xFF; i++) {
597                 if (stat_table[i][0] & drv_stat) {
598                         *sk = stat_table[i][1];
599                         *asc = stat_table[i][2];
600                         *ascq = stat_table[i][3];
601                         goto translate_done;
602                 }
603         }
604         /* No error?  Undecoded? */
605         if (verbose)
606                 printk(KERN_WARNING "ata%u: no sense translation for "
607                        "status: 0x%02x\n", id, drv_stat);
608
609         /* We need a sensible error return here, which is tricky, and one
610            that won't cause people to do things like return a disk wrongly */
611         *sk = ABORTED_COMMAND;
612         *asc = 0x00;
613         *ascq = 0x00;
614
615  translate_done:
616         if (verbose)
617                 printk(KERN_ERR "ata%u: translated ATA stat/err 0x%02x/%02x "
618                        "to SCSI SK/ASC/ASCQ 0x%x/%02x/%02x\n",
619                        id, drv_stat, drv_err, *sk, *asc, *ascq);
620         return;
621 }
622
623 /*
624  *      ata_gen_passthru_sense - Generate check condition sense block.
625  *      @qc: Command that completed.
626  *
627  *      This function is specific to the ATA descriptor format sense
628  *      block specified for the ATA pass through commands.  Regardless
629  *      of whether the command errored or not, return a sense
630  *      block. Copy all controller registers into the sense
631  *      block. Clear sense key, ASC & ASCQ if there is no error.
632  *
633  *      LOCKING:
634  *      None.
635  */
636 static void ata_gen_passthru_sense(struct ata_queued_cmd *qc)
637 {
638         struct scsi_cmnd *cmd = qc->scsicmd;
639         struct ata_taskfile *tf = &qc->result_tf;
640         unsigned char *sb = cmd->sense_buffer;
641         unsigned char *desc = sb + 8;
642         int verbose = qc->ap->ops->error_handler == NULL;
643
644         memset(sb, 0, SCSI_SENSE_BUFFERSIZE);
645
646         cmd->result = (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION;
647
648         /*
649          * Use ata_to_sense_error() to map status register bits
650          * onto sense key, asc & ascq.
651          */
652         if (qc->err_mask ||
653             tf->command & (ATA_BUSY | ATA_DF | ATA_ERR | ATA_DRQ)) {
654                 ata_to_sense_error(qc->ap->print_id, tf->command, tf->feature,
655                                    &sb[1], &sb[2], &sb[3], verbose);
656                 sb[1] &= 0x0f;
657         }
658
659         /*
660          * Sense data is current and format is descriptor.
661          */
662         sb[0] = 0x72;
663
664         desc[0] = 0x09;
665
666         /* set length of additional sense data */
667         sb[7] = 14;
668         desc[1] = 12;
669
670         /*
671          * Copy registers into sense buffer.
672          */
673         desc[2] = 0x00;
674         desc[3] = tf->feature;  /* == error reg */
675         desc[5] = tf->nsect;
676         desc[7] = tf->lbal;
677         desc[9] = tf->lbam;
678         desc[11] = tf->lbah;
679         desc[12] = tf->device;
680         desc[13] = tf->command; /* == status reg */
681
682         /*
683          * Fill in Extend bit, and the high order bytes
684          * if applicable.
685          */
686         if (tf->flags & ATA_TFLAG_LBA48) {
687                 desc[2] |= 0x01;
688                 desc[4] = tf->hob_nsect;
689                 desc[6] = tf->hob_lbal;
690                 desc[8] = tf->hob_lbam;
691                 desc[10] = tf->hob_lbah;
692         }
693 }
694
695 /**
696  *      ata_gen_ata_sense - generate a SCSI fixed sense block
697  *      @qc: Command that we are erroring out
698  *
699  *      Generate sense block for a failed ATA command @qc.  Descriptor
700  *      format is used to accomodate LBA48 block address.
701  *
702  *      LOCKING:
703  *      None.
704  */
705 static void ata_gen_ata_sense(struct ata_queued_cmd *qc)
706 {
707         struct ata_device *dev = qc->dev;
708         struct scsi_cmnd *cmd = qc->scsicmd;
709         struct ata_taskfile *tf = &qc->result_tf;
710         unsigned char *sb = cmd->sense_buffer;
711         unsigned char *desc = sb + 8;
712         int verbose = qc->ap->ops->error_handler == NULL;
713         u64 block;
714
715         memset(sb, 0, SCSI_SENSE_BUFFERSIZE);
716
717         cmd->result = (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION;
718
719         /* sense data is current and format is descriptor */
720         sb[0] = 0x72;
721
722         /* Use ata_to_sense_error() to map status register bits
723          * onto sense key, asc & ascq.
724          */
725         if (qc->err_mask ||
726             tf->command & (ATA_BUSY | ATA_DF | ATA_ERR | ATA_DRQ)) {
727                 ata_to_sense_error(qc->ap->print_id, tf->command, tf->feature,
728                                    &sb[1], &sb[2], &sb[3], verbose);
729                 sb[1] &= 0x0f;
730         }
731
732         block = ata_tf_read_block(&qc->result_tf, dev);
733
734         /* information sense data descriptor */
735         sb[7] = 12;
736         desc[0] = 0x00;
737         desc[1] = 10;
738
739         desc[2] |= 0x80;        /* valid */
740         desc[6] = block >> 40;
741         desc[7] = block >> 32;
742         desc[8] = block >> 24;
743         desc[9] = block >> 16;
744         desc[10] = block >> 8;
745         desc[11] = block;
746 }
747
748 static void ata_scsi_sdev_config(struct scsi_device *sdev)
749 {
750         sdev->use_10_for_rw = 1;
751         sdev->use_10_for_ms = 1;
752
753         /* Schedule policy is determined by ->qc_defer() callback and
754          * it needs to see every deferred qc.  Set dev_blocked to 1 to
755          * prevent SCSI midlayer from automatically deferring
756          * requests.
757          */
758         sdev->max_device_blocked = 1;
759 }
760
761 static void ata_scsi_dev_config(struct scsi_device *sdev,
762                                 struct ata_device *dev)
763 {
764         /* configure max sectors */
765         blk_queue_max_sectors(sdev->request_queue, dev->max_sectors);
766
767         /* SATA DMA transfers must be multiples of 4 byte, so
768          * we need to pad ATAPI transfers using an extra sg.
769          * Decrement max hw segments accordingly.
770          */
771         if (dev->class == ATA_DEV_ATAPI) {
772                 struct request_queue *q = sdev->request_queue;
773                 blk_queue_max_hw_segments(q, q->max_hw_segments - 1);
774         }
775
776         if (dev->flags & ATA_DFLAG_NCQ) {
777                 int depth;
778
779                 depth = min(sdev->host->can_queue, ata_id_queue_depth(dev->id));
780                 depth = min(ATA_MAX_QUEUE - 1, depth);
781                 scsi_adjust_queue_depth(sdev, MSG_SIMPLE_TAG, depth);
782         }
783 }
784
785 /**
786  *      ata_scsi_slave_config - Set SCSI device attributes
787  *      @sdev: SCSI device to examine
788  *
789  *      This is called before we actually start reading
790  *      and writing to the device, to configure certain
791  *      SCSI mid-layer behaviors.
792  *
793  *      LOCKING:
794  *      Defined by SCSI layer.  We don't really care.
795  */
796
797 int ata_scsi_slave_config(struct scsi_device *sdev)
798 {
799         struct ata_port *ap = ata_shost_to_port(sdev->host);
800         struct ata_device *dev = __ata_scsi_find_dev(ap, sdev);
801
802         ata_scsi_sdev_config(sdev);
803
804         sdev->manage_start_stop = 1;
805
806         if (dev)
807                 ata_scsi_dev_config(sdev, dev);
808
809         return 0;       /* scsi layer doesn't check return value, sigh */
810 }
811
812 /**
813  *      ata_scsi_slave_destroy - SCSI device is about to be destroyed
814  *      @sdev: SCSI device to be destroyed
815  *
816  *      @sdev is about to be destroyed for hot/warm unplugging.  If
817  *      this unplugging was initiated by libata as indicated by NULL
818  *      dev->sdev, this function doesn't have to do anything.
819  *      Otherwise, SCSI layer initiated warm-unplug is in progress.
820  *      Clear dev->sdev, schedule the device for ATA detach and invoke
821  *      EH.
822  *
823  *      LOCKING:
824  *      Defined by SCSI layer.  We don't really care.
825  */
826 void ata_scsi_slave_destroy(struct scsi_device *sdev)
827 {
828         struct ata_port *ap = ata_shost_to_port(sdev->host);
829         unsigned long flags;
830         struct ata_device *dev;
831
832         if (!ap->ops->error_handler)
833                 return;
834
835         spin_lock_irqsave(ap->lock, flags);
836         dev = __ata_scsi_find_dev(ap, sdev);
837         if (dev && dev->sdev) {
838                 /* SCSI device already in CANCEL state, no need to offline it */
839                 dev->sdev = NULL;
840                 dev->flags |= ATA_DFLAG_DETACH;
841                 ata_port_schedule_eh(ap);
842         }
843         spin_unlock_irqrestore(ap->lock, flags);
844 }
845
846 /**
847  *      ata_scsi_change_queue_depth - SCSI callback for queue depth config
848  *      @sdev: SCSI device to configure queue depth for
849  *      @queue_depth: new queue depth
850  *
851  *      This is libata standard hostt->change_queue_depth callback.
852  *      SCSI will call into this callback when user tries to set queue
853  *      depth via sysfs.
854  *
855  *      LOCKING:
856  *      SCSI layer (we don't care)
857  *
858  *      RETURNS:
859  *      Newly configured queue depth.
860  */
861 int ata_scsi_change_queue_depth(struct scsi_device *sdev, int queue_depth)
862 {
863         struct ata_port *ap = ata_shost_to_port(sdev->host);
864         struct ata_device *dev;
865         unsigned long flags;
866
867         if (queue_depth < 1 || queue_depth == sdev->queue_depth)
868                 return sdev->queue_depth;
869
870         dev = ata_scsi_find_dev(ap, sdev);
871         if (!dev || !ata_dev_enabled(dev))
872                 return sdev->queue_depth;
873
874         /* NCQ enabled? */
875         spin_lock_irqsave(ap->lock, flags);
876         dev->flags &= ~ATA_DFLAG_NCQ_OFF;
877         if (queue_depth == 1 || !ata_ncq_enabled(dev)) {
878                 dev->flags |= ATA_DFLAG_NCQ_OFF;
879                 queue_depth = 1;
880         }
881         spin_unlock_irqrestore(ap->lock, flags);
882
883         /* limit and apply queue depth */
884         queue_depth = min(queue_depth, sdev->host->can_queue);
885         queue_depth = min(queue_depth, ata_id_queue_depth(dev->id));
886         queue_depth = min(queue_depth, ATA_MAX_QUEUE - 1);
887
888         if (sdev->queue_depth == queue_depth)
889                 return -EINVAL;
890
891         scsi_adjust_queue_depth(sdev, MSG_SIMPLE_TAG, queue_depth);
892         return queue_depth;
893 }
894
895 /* XXX: for spindown warning */
896 static void ata_delayed_done_timerfn(unsigned long arg)
897 {
898         struct scsi_cmnd *scmd = (void *)arg;
899
900         scmd->scsi_done(scmd);
901 }
902
903 /* XXX: for spindown warning */
904 static void ata_delayed_done(struct scsi_cmnd *scmd)
905 {
906         static struct timer_list timer;
907
908         setup_timer(&timer, ata_delayed_done_timerfn, (unsigned long)scmd);
909         mod_timer(&timer, jiffies + 5 * HZ);
910 }
911
912 /**
913  *      ata_scsi_start_stop_xlat - Translate SCSI START STOP UNIT command
914  *      @qc: Storage for translated ATA taskfile
915  *
916  *      Sets up an ATA taskfile to issue STANDBY (to stop) or READ VERIFY
917  *      (to start). Perhaps these commands should be preceded by
918  *      CHECK POWER MODE to see what power mode the device is already in.
919  *      [See SAT revision 5 at www.t10.org]
920  *
921  *      LOCKING:
922  *      spin_lock_irqsave(host lock)
923  *
924  *      RETURNS:
925  *      Zero on success, non-zero on error.
926  */
927 static unsigned int ata_scsi_start_stop_xlat(struct ata_queued_cmd *qc)
928 {
929         struct scsi_cmnd *scmd = qc->scsicmd;
930         struct ata_taskfile *tf = &qc->tf;
931         const u8 *cdb = scmd->cmnd;
932
933         if (scmd->cmd_len < 5)
934                 goto invalid_fld;
935
936         tf->flags |= ATA_TFLAG_DEVICE | ATA_TFLAG_ISADDR;
937         tf->protocol = ATA_PROT_NODATA;
938         if (cdb[1] & 0x1) {
939                 ;       /* ignore IMMED bit, violates sat-r05 */
940         }
941         if (cdb[4] & 0x2)
942                 goto invalid_fld;       /* LOEJ bit set not supported */
943         if (((cdb[4] >> 4) & 0xf) != 0)
944                 goto invalid_fld;       /* power conditions not supported */
945
946         if (qc->dev->horkage & ATA_HORKAGE_SKIP_PM) {
947                 /* the device lacks PM support, finish without doing anything */
948                 scmd->result = SAM_STAT_GOOD;
949                 return 1;
950         }
951
952         if (cdb[4] & 0x1) {
953                 tf->nsect = 1;  /* 1 sector, lba=0 */
954
955                 if (qc->dev->flags & ATA_DFLAG_LBA) {
956                         tf->flags |= ATA_TFLAG_LBA;
957
958                         tf->lbah = 0x0;
959                         tf->lbam = 0x0;
960                         tf->lbal = 0x0;
961                         tf->device |= ATA_LBA;
962                 } else {
963                         /* CHS */
964                         tf->lbal = 0x1; /* sect */
965                         tf->lbam = 0x0; /* cyl low */
966                         tf->lbah = 0x0; /* cyl high */
967                 }
968
969                 tf->command = ATA_CMD_VERIFY;   /* READ VERIFY */
970         } else {
971                 /* XXX: This is for backward compatibility, will be
972                  * removed.  Read Documentation/feature-removal-schedule.txt
973                  * for more info.
974                  */
975                 if ((qc->dev->flags & ATA_DFLAG_SPUNDOWN) &&
976                     (system_state == SYSTEM_HALT ||
977                      system_state == SYSTEM_POWER_OFF)) {
978                         static unsigned long warned;
979
980                         if (!test_and_set_bit(0, &warned)) {
981                                 ata_dev_printk(qc->dev, KERN_WARNING,
982                                         "DISK MIGHT NOT BE SPUN DOWN PROPERLY. "
983                                         "UPDATE SHUTDOWN UTILITY\n");
984                                 ata_dev_printk(qc->dev, KERN_WARNING,
985                                         "For more info, visit "
986                                         "http://linux-ata.org/shutdown.html\n");
987
988                                 /* ->scsi_done is not used, use it for
989                                  * delayed completion.
990                                  */
991                                 scmd->scsi_done = qc->scsidone;
992                                 qc->scsidone = ata_delayed_done;
993                         }
994                         scmd->result = SAM_STAT_GOOD;
995                         return 1;
996                 }
997
998                 /* Issue ATA STANDBY IMMEDIATE command */
999                 tf->command = ATA_CMD_STANDBYNOW1;
1000         }
1001
1002         /*
1003          * Standby and Idle condition timers could be implemented but that
1004          * would require libata to implement the Power condition mode page
1005          * and allow the user to change it. Changing mode pages requires
1006          * MODE SELECT to be implemented.
1007          */
1008
1009         return 0;
1010
1011 invalid_fld:
1012         ata_scsi_set_sense(scmd, ILLEGAL_REQUEST, 0x24, 0x0);
1013         /* "Invalid field in cbd" */
1014         return 1;
1015 }
1016
1017
1018 /**
1019  *      ata_scsi_flush_xlat - Translate SCSI SYNCHRONIZE CACHE command
1020  *      @qc: Storage for translated ATA taskfile
1021  *
1022  *      Sets up an ATA taskfile to issue FLUSH CACHE or
1023  *      FLUSH CACHE EXT.
1024  *
1025  *      LOCKING:
1026  *      spin_lock_irqsave(host lock)
1027  *
1028  *      RETURNS:
1029  *      Zero on success, non-zero on error.
1030  */
1031 static unsigned int ata_scsi_flush_xlat(struct ata_queued_cmd *qc)
1032 {
1033         struct ata_taskfile *tf = &qc->tf;
1034
1035         tf->flags |= ATA_TFLAG_DEVICE;
1036         tf->protocol = ATA_PROT_NODATA;
1037
1038         if (qc->dev->flags & ATA_DFLAG_FLUSH_EXT)
1039                 tf->command = ATA_CMD_FLUSH_EXT;
1040         else
1041                 tf->command = ATA_CMD_FLUSH;
1042
1043         return 0;
1044 }
1045
1046 /**
1047  *      scsi_6_lba_len - Get LBA and transfer length
1048  *      @cdb: SCSI command to translate
1049  *
1050  *      Calculate LBA and transfer length for 6-byte commands.
1051  *
1052  *      RETURNS:
1053  *      @plba: the LBA
1054  *      @plen: the transfer length
1055  */
1056 static void scsi_6_lba_len(const u8 *cdb, u64 *plba, u32 *plen)
1057 {
1058         u64 lba = 0;
1059         u32 len;
1060
1061         VPRINTK("six-byte command\n");
1062
1063         lba |= ((u64)(cdb[1] & 0x1f)) << 16;
1064         lba |= ((u64)cdb[2]) << 8;
1065         lba |= ((u64)cdb[3]);
1066
1067         len = cdb[4];
1068
1069         *plba = lba;
1070         *plen = len;
1071 }
1072
1073 /**
1074  *      scsi_10_lba_len - Get LBA and transfer length
1075  *      @cdb: SCSI command to translate
1076  *
1077  *      Calculate LBA and transfer length for 10-byte commands.
1078  *
1079  *      RETURNS:
1080  *      @plba: the LBA
1081  *      @plen: the transfer length
1082  */
1083 static void scsi_10_lba_len(const u8 *cdb, u64 *plba, u32 *plen)
1084 {
1085         u64 lba = 0;
1086         u32 len = 0;
1087
1088         VPRINTK("ten-byte command\n");
1089
1090         lba |= ((u64)cdb[2]) << 24;
1091         lba |= ((u64)cdb[3]) << 16;
1092         lba |= ((u64)cdb[4]) << 8;
1093         lba |= ((u64)cdb[5]);
1094
1095         len |= ((u32)cdb[7]) << 8;
1096         len |= ((u32)cdb[8]);
1097
1098         *plba = lba;
1099         *plen = len;
1100 }
1101
1102 /**
1103  *      scsi_16_lba_len - Get LBA and transfer length
1104  *      @cdb: SCSI command to translate
1105  *
1106  *      Calculate LBA and transfer length for 16-byte commands.
1107  *
1108  *      RETURNS:
1109  *      @plba: the LBA
1110  *      @plen: the transfer length
1111  */
1112 static void scsi_16_lba_len(const u8 *cdb, u64 *plba, u32 *plen)
1113 {
1114         u64 lba = 0;
1115         u32 len = 0;
1116
1117         VPRINTK("sixteen-byte command\n");
1118
1119         lba |= ((u64)cdb[2]) << 56;
1120         lba |= ((u64)cdb[3]) << 48;
1121         lba |= ((u64)cdb[4]) << 40;
1122         lba |= ((u64)cdb[5]) << 32;
1123         lba |= ((u64)cdb[6]) << 24;
1124         lba |= ((u64)cdb[7]) << 16;
1125         lba |= ((u64)cdb[8]) << 8;
1126         lba |= ((u64)cdb[9]);
1127
1128         len |= ((u32)cdb[10]) << 24;
1129         len |= ((u32)cdb[11]) << 16;
1130         len |= ((u32)cdb[12]) << 8;
1131         len |= ((u32)cdb[13]);
1132
1133         *plba = lba;
1134         *plen = len;
1135 }
1136
1137 /**
1138  *      ata_scsi_verify_xlat - Translate SCSI VERIFY command into an ATA one
1139  *      @qc: Storage for translated ATA taskfile
1140  *
1141  *      Converts SCSI VERIFY command to an ATA READ VERIFY command.
1142  *
1143  *      LOCKING:
1144  *      spin_lock_irqsave(host lock)
1145  *
1146  *      RETURNS:
1147  *      Zero on success, non-zero on error.
1148  */
1149 static unsigned int ata_scsi_verify_xlat(struct ata_queued_cmd *qc)
1150 {
1151         struct scsi_cmnd *scmd = qc->scsicmd;
1152         struct ata_taskfile *tf = &qc->tf;
1153         struct ata_device *dev = qc->dev;
1154         u64 dev_sectors = qc->dev->n_sectors;
1155         const u8 *cdb = scmd->cmnd;
1156         u64 block;
1157         u32 n_block;
1158
1159         tf->flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
1160         tf->protocol = ATA_PROT_NODATA;
1161
1162         if (cdb[0] == VERIFY) {
1163                 if (scmd->cmd_len < 10)
1164                         goto invalid_fld;
1165                 scsi_10_lba_len(cdb, &block, &n_block);
1166         } else if (cdb[0] == VERIFY_16) {
1167                 if (scmd->cmd_len < 16)
1168                         goto invalid_fld;
1169                 scsi_16_lba_len(cdb, &block, &n_block);
1170         } else
1171                 goto invalid_fld;
1172
1173         if (!n_block)
1174                 goto nothing_to_do;
1175         if (block >= dev_sectors)
1176                 goto out_of_range;
1177         if ((block + n_block) > dev_sectors)
1178                 goto out_of_range;
1179
1180         if (dev->flags & ATA_DFLAG_LBA) {
1181                 tf->flags |= ATA_TFLAG_LBA;
1182
1183                 if (lba_28_ok(block, n_block)) {
1184                         /* use LBA28 */
1185                         tf->command = ATA_CMD_VERIFY;
1186                         tf->device |= (block >> 24) & 0xf;
1187                 } else if (lba_48_ok(block, n_block)) {
1188                         if (!(dev->flags & ATA_DFLAG_LBA48))
1189                                 goto out_of_range;
1190
1191                         /* use LBA48 */
1192                         tf->flags |= ATA_TFLAG_LBA48;
1193                         tf->command = ATA_CMD_VERIFY_EXT;
1194
1195                         tf->hob_nsect = (n_block >> 8) & 0xff;
1196
1197                         tf->hob_lbah = (block >> 40) & 0xff;
1198                         tf->hob_lbam = (block >> 32) & 0xff;
1199                         tf->hob_lbal = (block >> 24) & 0xff;
1200                 } else
1201                         /* request too large even for LBA48 */
1202                         goto out_of_range;
1203
1204                 tf->nsect = n_block & 0xff;
1205
1206                 tf->lbah = (block >> 16) & 0xff;
1207                 tf->lbam = (block >> 8) & 0xff;
1208                 tf->lbal = block & 0xff;
1209
1210                 tf->device |= ATA_LBA;
1211         } else {
1212                 /* CHS */
1213                 u32 sect, head, cyl, track;
1214
1215                 if (!lba_28_ok(block, n_block))
1216                         goto out_of_range;
1217
1218                 /* Convert LBA to CHS */
1219                 track = (u32)block / dev->sectors;
1220                 cyl   = track / dev->heads;
1221                 head  = track % dev->heads;
1222                 sect  = (u32)block % dev->sectors + 1;
1223
1224                 DPRINTK("block %u track %u cyl %u head %u sect %u\n",
1225                         (u32)block, track, cyl, head, sect);
1226
1227                 /* Check whether the converted CHS can fit.
1228                    Cylinder: 0-65535
1229                    Head: 0-15
1230                    Sector: 1-255*/
1231                 if ((cyl >> 16) || (head >> 4) || (sect >> 8) || (!sect))
1232                         goto out_of_range;
1233
1234                 tf->command = ATA_CMD_VERIFY;
1235                 tf->nsect = n_block & 0xff; /* Sector count 0 means 256 sectors */
1236                 tf->lbal = sect;
1237                 tf->lbam = cyl;
1238                 tf->lbah = cyl >> 8;
1239                 tf->device |= head;
1240         }
1241
1242         return 0;
1243
1244 invalid_fld:
1245         ata_scsi_set_sense(scmd, ILLEGAL_REQUEST, 0x24, 0x0);
1246         /* "Invalid field in cbd" */
1247         return 1;
1248
1249 out_of_range:
1250         ata_scsi_set_sense(scmd, ILLEGAL_REQUEST, 0x21, 0x0);
1251         /* "Logical Block Address out of range" */
1252         return 1;
1253
1254 nothing_to_do:
1255         scmd->result = SAM_STAT_GOOD;
1256         return 1;
1257 }
1258
1259 /**
1260  *      ata_scsi_rw_xlat - Translate SCSI r/w command into an ATA one
1261  *      @qc: Storage for translated ATA taskfile
1262  *
1263  *      Converts any of six SCSI read/write commands into the
1264  *      ATA counterpart, including starting sector (LBA),
1265  *      sector count, and taking into account the device's LBA48
1266  *      support.
1267  *
1268  *      Commands %READ_6, %READ_10, %READ_16, %WRITE_6, %WRITE_10, and
1269  *      %WRITE_16 are currently supported.
1270  *
1271  *      LOCKING:
1272  *      spin_lock_irqsave(host lock)
1273  *
1274  *      RETURNS:
1275  *      Zero on success, non-zero on error.
1276  */
1277 static unsigned int ata_scsi_rw_xlat(struct ata_queued_cmd *qc)
1278 {
1279         struct scsi_cmnd *scmd = qc->scsicmd;
1280         const u8 *cdb = scmd->cmnd;
1281         unsigned int tf_flags = 0;
1282         u64 block;
1283         u32 n_block;
1284         int rc;
1285
1286         if (cdb[0] == WRITE_10 || cdb[0] == WRITE_6 || cdb[0] == WRITE_16)
1287                 tf_flags |= ATA_TFLAG_WRITE;
1288
1289         /* Calculate the SCSI LBA, transfer length and FUA. */
1290         switch (cdb[0]) {
1291         case READ_10:
1292         case WRITE_10:
1293                 if (unlikely(scmd->cmd_len < 10))
1294                         goto invalid_fld;
1295                 scsi_10_lba_len(cdb, &block, &n_block);
1296                 if (unlikely(cdb[1] & (1 << 3)))
1297                         tf_flags |= ATA_TFLAG_FUA;
1298                 break;
1299         case READ_6:
1300         case WRITE_6:
1301                 if (unlikely(scmd->cmd_len < 6))
1302                         goto invalid_fld;
1303                 scsi_6_lba_len(cdb, &block, &n_block);
1304
1305                 /* for 6-byte r/w commands, transfer length 0
1306                  * means 256 blocks of data, not 0 block.
1307                  */
1308                 if (!n_block)
1309                         n_block = 256;
1310                 break;
1311         case READ_16:
1312         case WRITE_16:
1313                 if (unlikely(scmd->cmd_len < 16))
1314                         goto invalid_fld;
1315                 scsi_16_lba_len(cdb, &block, &n_block);
1316                 if (unlikely(cdb[1] & (1 << 3)))
1317                         tf_flags |= ATA_TFLAG_FUA;
1318                 break;
1319         default:
1320                 DPRINTK("no-byte command\n");
1321                 goto invalid_fld;
1322         }
1323
1324         /* Check and compose ATA command */
1325         if (!n_block)
1326                 /* For 10-byte and 16-byte SCSI R/W commands, transfer
1327                  * length 0 means transfer 0 block of data.
1328                  * However, for ATA R/W commands, sector count 0 means
1329                  * 256 or 65536 sectors, not 0 sectors as in SCSI.
1330                  *
1331                  * WARNING: one or two older ATA drives treat 0 as 0...
1332                  */
1333                 goto nothing_to_do;
1334
1335         qc->flags |= ATA_QCFLAG_IO;
1336         qc->nbytes = n_block * ATA_SECT_SIZE;
1337
1338         rc = ata_build_rw_tf(&qc->tf, qc->dev, block, n_block, tf_flags,
1339                              qc->tag);
1340         if (likely(rc == 0))
1341                 return 0;
1342
1343         if (rc == -ERANGE)
1344                 goto out_of_range;
1345         /* treat all other errors as -EINVAL, fall through */
1346 invalid_fld:
1347         ata_scsi_set_sense(scmd, ILLEGAL_REQUEST, 0x24, 0x0);
1348         /* "Invalid field in cbd" */
1349         return 1;
1350
1351 out_of_range:
1352         ata_scsi_set_sense(scmd, ILLEGAL_REQUEST, 0x21, 0x0);
1353         /* "Logical Block Address out of range" */
1354         return 1;
1355
1356 nothing_to_do:
1357         scmd->result = SAM_STAT_GOOD;
1358         return 1;
1359 }
1360
1361 static void ata_scsi_qc_complete(struct ata_queued_cmd *qc)
1362 {
1363         struct ata_port *ap = qc->ap;
1364         struct scsi_cmnd *cmd = qc->scsicmd;
1365         u8 *cdb = cmd->cmnd;
1366         int need_sense = (qc->err_mask != 0);
1367
1368         /* For ATA pass thru (SAT) commands, generate a sense block if
1369          * user mandated it or if there's an error.  Note that if we
1370          * generate because the user forced us to, a check condition
1371          * is generated and the ATA register values are returned
1372          * whether the command completed successfully or not. If there
1373          * was no error, SK, ASC and ASCQ will all be zero.
1374          */
1375         if (((cdb[0] == ATA_16) || (cdb[0] == ATA_12)) &&
1376             ((cdb[2] & 0x20) || need_sense)) {
1377                 ata_gen_passthru_sense(qc);
1378         } else {
1379                 if (!need_sense) {
1380                         cmd->result = SAM_STAT_GOOD;
1381                 } else {
1382                         /* TODO: decide which descriptor format to use
1383                          * for 48b LBA devices and call that here
1384                          * instead of the fixed desc, which is only
1385                          * good for smaller LBA (and maybe CHS?)
1386                          * devices.
1387                          */
1388                         ata_gen_ata_sense(qc);
1389                 }
1390         }
1391
1392         /* XXX: track spindown state for spindown skipping and warning */
1393         if (unlikely(qc->tf.command == ATA_CMD_STANDBY ||
1394                      qc->tf.command == ATA_CMD_STANDBYNOW1))
1395                 qc->dev->flags |= ATA_DFLAG_SPUNDOWN;
1396         else if (likely(system_state != SYSTEM_HALT &&
1397                         system_state != SYSTEM_POWER_OFF))
1398                 qc->dev->flags &= ~ATA_DFLAG_SPUNDOWN;
1399
1400         if (need_sense && !ap->ops->error_handler)
1401                 ata_dump_status(ap->print_id, &qc->result_tf);
1402
1403         qc->scsidone(cmd);
1404
1405         ata_qc_free(qc);
1406 }
1407
1408 /**
1409  *      ata_scsi_translate - Translate then issue SCSI command to ATA device
1410  *      @dev: ATA device to which the command is addressed
1411  *      @cmd: SCSI command to execute
1412  *      @done: SCSI command completion function
1413  *      @xlat_func: Actor which translates @cmd to an ATA taskfile
1414  *
1415  *      Our ->queuecommand() function has decided that the SCSI
1416  *      command issued can be directly translated into an ATA
1417  *      command, rather than handled internally.
1418  *
1419  *      This function sets up an ata_queued_cmd structure for the
1420  *      SCSI command, and sends that ata_queued_cmd to the hardware.
1421  *
1422  *      The xlat_func argument (actor) returns 0 if ready to execute
1423  *      ATA command, else 1 to finish translation. If 1 is returned
1424  *      then cmd->result (and possibly cmd->sense_buffer) are assumed
1425  *      to be set reflecting an error condition or clean (early)
1426  *      termination.
1427  *
1428  *      LOCKING:
1429  *      spin_lock_irqsave(host lock)
1430  *
1431  *      RETURNS:
1432  *      0 on success, SCSI_ML_QUEUE_DEVICE_BUSY if the command
1433  *      needs to be deferred.
1434  */
1435 static int ata_scsi_translate(struct ata_device *dev, struct scsi_cmnd *cmd,
1436                               void (*done)(struct scsi_cmnd *),
1437                               ata_xlat_func_t xlat_func)
1438 {
1439         struct ata_port *ap = dev->link->ap;
1440         struct ata_queued_cmd *qc;
1441         int rc;
1442
1443         VPRINTK("ENTER\n");
1444
1445         qc = ata_scsi_qc_new(dev, cmd, done);
1446         if (!qc)
1447                 goto err_mem;
1448
1449         /* data is present; dma-map it */
1450         if (cmd->sc_data_direction == DMA_FROM_DEVICE ||
1451             cmd->sc_data_direction == DMA_TO_DEVICE) {
1452                 if (unlikely(scsi_bufflen(cmd) < 1)) {
1453                         ata_dev_printk(dev, KERN_WARNING,
1454                                        "WARNING: zero len r/w req\n");
1455                         goto err_did;
1456                 }
1457
1458                 ata_sg_init(qc, scsi_sglist(cmd), scsi_sg_count(cmd));
1459
1460                 qc->dma_dir = cmd->sc_data_direction;
1461         }
1462
1463         qc->complete_fn = ata_scsi_qc_complete;
1464
1465         if (xlat_func(qc))
1466                 goto early_finish;
1467
1468         if (ap->ops->qc_defer) {
1469                 if ((rc = ap->ops->qc_defer(qc)))
1470                         goto defer;
1471         }
1472
1473         /* select device, send command to hardware */
1474         ata_qc_issue(qc);
1475
1476         VPRINTK("EXIT\n");
1477         return 0;
1478
1479 early_finish:
1480         ata_qc_free(qc);
1481         qc->scsidone(cmd);
1482         DPRINTK("EXIT - early finish (good or error)\n");
1483         return 0;
1484
1485 err_did:
1486         ata_qc_free(qc);
1487         cmd->result = (DID_ERROR << 16);
1488         qc->scsidone(cmd);
1489 err_mem:
1490         DPRINTK("EXIT - internal\n");
1491         return 0;
1492
1493 defer:
1494         ata_qc_free(qc);
1495         DPRINTK("EXIT - defer\n");
1496         if (rc == ATA_DEFER_LINK)
1497                 return SCSI_MLQUEUE_DEVICE_BUSY;
1498         else
1499                 return SCSI_MLQUEUE_HOST_BUSY;
1500 }
1501
1502 /**
1503  *      ata_scsi_rbuf_get - Map response buffer.
1504  *      @cmd: SCSI command containing buffer to be mapped.
1505  *      @buf_out: Pointer to mapped area.
1506  *
1507  *      Maps buffer contained within SCSI command @cmd.
1508  *
1509  *      LOCKING:
1510  *      spin_lock_irqsave(host lock)
1511  *
1512  *      RETURNS:
1513  *      Length of response buffer.
1514  */
1515
1516 static unsigned int ata_scsi_rbuf_get(struct scsi_cmnd *cmd, u8 **buf_out)
1517 {
1518         u8 *buf;
1519         unsigned int buflen;
1520
1521         struct scatterlist *sg = scsi_sglist(cmd);
1522
1523         if (sg) {
1524                 buf = kmap_atomic(sg_page(sg), KM_IRQ0) + sg->offset;
1525                 buflen = sg->length;
1526         } else {
1527                 buf = NULL;
1528                 buflen = 0;
1529         }
1530
1531         *buf_out = buf;
1532         return buflen;
1533 }
1534
1535 /**
1536  *      ata_scsi_rbuf_put - Unmap response buffer.
1537  *      @cmd: SCSI command containing buffer to be unmapped.
1538  *      @buf: buffer to unmap
1539  *
1540  *      Unmaps response buffer contained within @cmd.
1541  *
1542  *      LOCKING:
1543  *      spin_lock_irqsave(host lock)
1544  */
1545
1546 static inline void ata_scsi_rbuf_put(struct scsi_cmnd *cmd, u8 *buf)
1547 {
1548         struct scatterlist *sg = scsi_sglist(cmd);
1549         if (sg)
1550                 kunmap_atomic(buf - sg->offset, KM_IRQ0);
1551 }
1552
1553 /**
1554  *      ata_scsi_rbuf_fill - wrapper for SCSI command simulators
1555  *      @args: device IDENTIFY data / SCSI command of interest.
1556  *      @actor: Callback hook for desired SCSI command simulator
1557  *
1558  *      Takes care of the hard work of simulating a SCSI command...
1559  *      Mapping the response buffer, calling the command's handler,
1560  *      and handling the handler's return value.  This return value
1561  *      indicates whether the handler wishes the SCSI command to be
1562  *      completed successfully (0), or not (in which case cmd->result
1563  *      and sense buffer are assumed to be set).
1564  *
1565  *      LOCKING:
1566  *      spin_lock_irqsave(host lock)
1567  */
1568
1569 void ata_scsi_rbuf_fill(struct ata_scsi_args *args,
1570                         unsigned int (*actor) (struct ata_scsi_args *args,
1571                                                u8 *rbuf, unsigned int buflen))
1572 {
1573         u8 *rbuf;
1574         unsigned int buflen, rc;
1575         struct scsi_cmnd *cmd = args->cmd;
1576
1577         buflen = ata_scsi_rbuf_get(cmd, &rbuf);
1578         memset(rbuf, 0, buflen);
1579         rc = actor(args, rbuf, buflen);
1580         ata_scsi_rbuf_put(cmd, rbuf);
1581
1582         if (rc == 0)
1583                 cmd->result = SAM_STAT_GOOD;
1584         args->done(cmd);
1585 }
1586
1587 /**
1588  *      ATA_SCSI_RBUF_SET - helper to set values in SCSI response buffer
1589  *      @idx: byte index into SCSI response buffer
1590  *      @val: value to set
1591  *
1592  *      To be used by SCSI command simulator functions.  This macros
1593  *      expects two local variables, u8 *rbuf and unsigned int buflen,
1594  *      are in scope.
1595  *
1596  *      LOCKING:
1597  *      None.
1598  */
1599 #define ATA_SCSI_RBUF_SET(idx, val) do { \
1600                 if ((idx) < buflen) rbuf[(idx)] = (u8)(val); \
1601         } while (0)
1602
1603 /**
1604  *      ata_scsiop_inq_std - Simulate INQUIRY command
1605  *      @args: device IDENTIFY data / SCSI command of interest.
1606  *      @rbuf: Response buffer, to which simulated SCSI cmd output is sent.
1607  *      @buflen: Response buffer length.
1608  *
1609  *      Returns standard device identification data associated
1610  *      with non-VPD INQUIRY command output.
1611  *
1612  *      LOCKING:
1613  *      spin_lock_irqsave(host lock)
1614  */
1615
1616 unsigned int ata_scsiop_inq_std(struct ata_scsi_args *args, u8 *rbuf,
1617                                unsigned int buflen)
1618 {
1619         u8 hdr[] = {
1620                 TYPE_DISK,
1621                 0,
1622                 0x5,    /* claim SPC-3 version compatibility */
1623                 2,
1624                 95 - 4
1625         };
1626
1627         /* set scsi removeable (RMB) bit per ata bit */
1628         if (ata_id_removeable(args->id))
1629                 hdr[1] |= (1 << 7);
1630
1631         VPRINTK("ENTER\n");
1632
1633         memcpy(rbuf, hdr, sizeof(hdr));
1634
1635         if (buflen > 35) {
1636                 memcpy(&rbuf[8], "ATA     ", 8);
1637                 ata_id_string(args->id, &rbuf[16], ATA_ID_PROD, 16);
1638                 ata_id_string(args->id, &rbuf[32], ATA_ID_FW_REV, 4);
1639                 if (rbuf[32] == 0 || rbuf[32] == ' ')
1640                         memcpy(&rbuf[32], "n/a ", 4);
1641         }
1642
1643         if (buflen > 63) {
1644                 const u8 versions[] = {
1645                         0x60,   /* SAM-3 (no version claimed) */
1646
1647                         0x03,
1648                         0x20,   /* SBC-2 (no version claimed) */
1649
1650                         0x02,
1651                         0x60    /* SPC-3 (no version claimed) */
1652                 };
1653
1654                 memcpy(rbuf + 59, versions, sizeof(versions));
1655         }
1656
1657         return 0;
1658 }
1659
1660 /**
1661  *      ata_scsiop_inq_00 - Simulate INQUIRY VPD page 0, list of pages
1662  *      @args: device IDENTIFY data / SCSI command of interest.
1663  *      @rbuf: Response buffer, to which simulated SCSI cmd output is sent.
1664  *      @buflen: Response buffer length.
1665  *
1666  *      Returns list of inquiry VPD pages available.
1667  *
1668  *      LOCKING:
1669  *      spin_lock_irqsave(host lock)
1670  */
1671
1672 unsigned int ata_scsiop_inq_00(struct ata_scsi_args *args, u8 *rbuf,
1673                               unsigned int buflen)
1674 {
1675         const u8 pages[] = {
1676                 0x00,   /* page 0x00, this page */
1677                 0x80,   /* page 0x80, unit serial no page */
1678                 0x83    /* page 0x83, device ident page */
1679         };
1680         rbuf[3] = sizeof(pages);        /* number of supported VPD pages */
1681
1682         if (buflen > 6)
1683                 memcpy(rbuf + 4, pages, sizeof(pages));
1684
1685         return 0;
1686 }
1687
1688 /**
1689  *      ata_scsiop_inq_80 - Simulate INQUIRY VPD page 80, device serial number
1690  *      @args: device IDENTIFY data / SCSI command of interest.
1691  *      @rbuf: Response buffer, to which simulated SCSI cmd output is sent.
1692  *      @buflen: Response buffer length.
1693  *
1694  *      Returns ATA device serial number.
1695  *
1696  *      LOCKING:
1697  *      spin_lock_irqsave(host lock)
1698  */
1699
1700 unsigned int ata_scsiop_inq_80(struct ata_scsi_args *args, u8 *rbuf,
1701                               unsigned int buflen)
1702 {
1703         const u8 hdr[] = {
1704                 0,
1705                 0x80,                   /* this page code */
1706                 0,
1707                 ATA_ID_SERNO_LEN,       /* page len */
1708         };
1709         memcpy(rbuf, hdr, sizeof(hdr));
1710
1711         if (buflen > (ATA_ID_SERNO_LEN + 4 - 1))
1712                 ata_id_string(args->id, (unsigned char *) &rbuf[4],
1713                               ATA_ID_SERNO, ATA_ID_SERNO_LEN);
1714
1715         return 0;
1716 }
1717
1718 /**
1719  *      ata_scsiop_inq_83 - Simulate INQUIRY VPD page 83, device identity
1720  *      @args: device IDENTIFY data / SCSI command of interest.
1721  *      @rbuf: Response buffer, to which simulated SCSI cmd output is sent.
1722  *      @buflen: Response buffer length.
1723  *
1724  *      Yields two logical unit device identification designators:
1725  *       - vendor specific ASCII containing the ATA serial number
1726  *       - SAT defined "t10 vendor id based" containing ASCII vendor
1727  *         name ("ATA     "), model and serial numbers.
1728  *
1729  *      LOCKING:
1730  *      spin_lock_irqsave(host lock)
1731  */
1732
1733 unsigned int ata_scsiop_inq_83(struct ata_scsi_args *args, u8 *rbuf,
1734                               unsigned int buflen)
1735 {
1736         int num;
1737         const int sat_model_serial_desc_len = 68;
1738
1739         rbuf[1] = 0x83;                 /* this page code */
1740         num = 4;
1741
1742         if (buflen > (ATA_ID_SERNO_LEN + num + 3)) {
1743                 /* piv=0, assoc=lu, code_set=ACSII, designator=vendor */
1744                 rbuf[num + 0] = 2;
1745                 rbuf[num + 3] = ATA_ID_SERNO_LEN;
1746                 num += 4;
1747                 ata_id_string(args->id, (unsigned char *) rbuf + num,
1748                               ATA_ID_SERNO, ATA_ID_SERNO_LEN);
1749                 num += ATA_ID_SERNO_LEN;
1750         }
1751         if (buflen > (sat_model_serial_desc_len + num + 3)) {
1752                 /* SAT defined lu model and serial numbers descriptor */
1753                 /* piv=0, assoc=lu, code_set=ACSII, designator=t10 vendor id */
1754                 rbuf[num + 0] = 2;
1755                 rbuf[num + 1] = 1;
1756                 rbuf[num + 3] = sat_model_serial_desc_len;
1757                 num += 4;
1758                 memcpy(rbuf + num, "ATA     ", 8);
1759                 num += 8;
1760                 ata_id_string(args->id, (unsigned char *) rbuf + num,
1761                               ATA_ID_PROD, ATA_ID_PROD_LEN);
1762                 num += ATA_ID_PROD_LEN;
1763                 ata_id_string(args->id, (unsigned char *) rbuf + num,
1764                               ATA_ID_SERNO, ATA_ID_SERNO_LEN);
1765                 num += ATA_ID_SERNO_LEN;
1766         }
1767         rbuf[3] = num - 4;    /* page len (assume less than 256 bytes) */
1768         return 0;
1769 }
1770
1771 /**
1772  *      ata_scsiop_inq_89 - Simulate INQUIRY VPD page 89, ATA info
1773  *      @args: device IDENTIFY data / SCSI command of interest.
1774  *      @rbuf: Response buffer, to which simulated SCSI cmd output is sent.
1775  *      @buflen: Response buffer length.
1776  *
1777  *      Yields SAT-specified ATA VPD page.
1778  *
1779  *      LOCKING:
1780  *      spin_lock_irqsave(host lock)
1781  */
1782
1783 unsigned int ata_scsiop_inq_89(struct ata_scsi_args *args, u8 *rbuf,
1784                               unsigned int buflen)
1785 {
1786         u8 pbuf[60];
1787         struct ata_taskfile tf;
1788         unsigned int i;
1789
1790         if (!buflen)
1791                 return 0;
1792
1793         memset(&pbuf, 0, sizeof(pbuf));
1794         memset(&tf, 0, sizeof(tf));
1795
1796         pbuf[1] = 0x89;                 /* our page code */
1797         pbuf[2] = (0x238 >> 8);         /* page size fixed at 238h */
1798         pbuf[3] = (0x238 & 0xff);
1799
1800         memcpy(&pbuf[8], "linux   ", 8);
1801         memcpy(&pbuf[16], "libata          ", 16);
1802         memcpy(&pbuf[32], DRV_VERSION, 4);
1803         ata_id_string(args->id, &pbuf[32], ATA_ID_FW_REV, 4);
1804
1805         /* we don't store the ATA device signature, so we fake it */
1806
1807         tf.command = ATA_DRDY;          /* really, this is Status reg */
1808         tf.lbal = 0x1;
1809         tf.nsect = 0x1;
1810
1811         ata_tf_to_fis(&tf, 0, 1, &pbuf[36]);    /* TODO: PMP? */
1812         pbuf[36] = 0x34;                /* force D2H Reg FIS (34h) */
1813
1814         pbuf[56] = ATA_CMD_ID_ATA;
1815
1816         i = min(buflen, 60U);
1817         memcpy(rbuf, &pbuf[0], i);
1818         buflen -= i;
1819
1820         if (!buflen)
1821                 return 0;
1822
1823         memcpy(&rbuf[60], &args->id[0], min(buflen, 512U));
1824         return 0;
1825 }
1826
1827 /**
1828  *      ata_scsiop_noop - Command handler that simply returns success.
1829  *      @args: device IDENTIFY data / SCSI command of interest.
1830  *      @rbuf: Response buffer, to which simulated SCSI cmd output is sent.
1831  *      @buflen: Response buffer length.
1832  *
1833  *      No operation.  Simply returns success to caller, to indicate
1834  *      that the caller should successfully complete this SCSI command.
1835  *
1836  *      LOCKING:
1837  *      spin_lock_irqsave(host lock)
1838  */
1839
1840 unsigned int ata_scsiop_noop(struct ata_scsi_args *args, u8 *rbuf,
1841                             unsigned int buflen)
1842 {
1843         VPRINTK("ENTER\n");
1844         return 0;
1845 }
1846
1847 /**
1848  *      ata_msense_push - Push data onto MODE SENSE data output buffer
1849  *      @ptr_io: (input/output) Location to store more output data
1850  *      @last: End of output data buffer
1851  *      @buf: Pointer to BLOB being added to output buffer
1852  *      @buflen: Length of BLOB
1853  *
1854  *      Store MODE SENSE data on an output buffer.
1855  *
1856  *      LOCKING:
1857  *      None.
1858  */
1859
1860 static void ata_msense_push(u8 **ptr_io, const u8 *last,
1861                             const u8 *buf, unsigned int buflen)
1862 {
1863         u8 *ptr = *ptr_io;
1864
1865         if ((ptr + buflen - 1) > last)
1866                 return;
1867
1868         memcpy(ptr, buf, buflen);
1869
1870         ptr += buflen;
1871
1872         *ptr_io = ptr;
1873 }
1874
1875 /**
1876  *      ata_msense_caching - Simulate MODE SENSE caching info page
1877  *      @id: device IDENTIFY data
1878  *      @ptr_io: (input/output) Location to store more output data
1879  *      @last: End of output data buffer
1880  *
1881  *      Generate a caching info page, which conditionally indicates
1882  *      write caching to the SCSI layer, depending on device
1883  *      capabilities.
1884  *
1885  *      LOCKING:
1886  *      None.
1887  */
1888
1889 static unsigned int ata_msense_caching(u16 *id, u8 **ptr_io,
1890                                        const u8 *last)
1891 {
1892         u8 page[CACHE_MPAGE_LEN];
1893
1894         memcpy(page, def_cache_mpage, sizeof(page));
1895         if (ata_id_wcache_enabled(id))
1896                 page[2] |= (1 << 2);    /* write cache enable */
1897         if (!ata_id_rahead_enabled(id))
1898                 page[12] |= (1 << 5);   /* disable read ahead */
1899
1900         ata_msense_push(ptr_io, last, page, sizeof(page));
1901         return sizeof(page);
1902 }
1903
1904 /**
1905  *      ata_msense_ctl_mode - Simulate MODE SENSE control mode page
1906  *      @dev: Device associated with this MODE SENSE command
1907  *      @ptr_io: (input/output) Location to store more output data
1908  *      @last: End of output data buffer
1909  *
1910  *      Generate a generic MODE SENSE control mode page.
1911  *
1912  *      LOCKING:
1913  *      None.
1914  */
1915
1916 static unsigned int ata_msense_ctl_mode(u8 **ptr_io, const u8 *last)
1917 {
1918         ata_msense_push(ptr_io, last, def_control_mpage,
1919                         sizeof(def_control_mpage));
1920         return sizeof(def_control_mpage);
1921 }
1922
1923 /**
1924  *      ata_msense_rw_recovery - Simulate MODE SENSE r/w error recovery page
1925  *      @dev: Device associated with this MODE SENSE command
1926  *      @ptr_io: (input/output) Location to store more output data
1927  *      @last: End of output data buffer
1928  *
1929  *      Generate a generic MODE SENSE r/w error recovery page.
1930  *
1931  *      LOCKING:
1932  *      None.
1933  */
1934
1935 static unsigned int ata_msense_rw_recovery(u8 **ptr_io, const u8 *last)
1936 {
1937
1938         ata_msense_push(ptr_io, last, def_rw_recovery_mpage,
1939                         sizeof(def_rw_recovery_mpage));
1940         return sizeof(def_rw_recovery_mpage);
1941 }
1942
1943 /*
1944  * We can turn this into a real blacklist if it's needed, for now just
1945  * blacklist any Maxtor BANC1G10 revision firmware
1946  */
1947 static int ata_dev_supports_fua(u16 *id)
1948 {
1949         unsigned char model[ATA_ID_PROD_LEN + 1], fw[ATA_ID_FW_REV_LEN + 1];
1950
1951         if (!libata_fua)
1952                 return 0;
1953         if (!ata_id_has_fua(id))
1954                 return 0;
1955
1956         ata_id_c_string(id, model, ATA_ID_PROD, sizeof(model));
1957         ata_id_c_string(id, fw, ATA_ID_FW_REV, sizeof(fw));
1958
1959         if (strcmp(model, "Maxtor"))
1960                 return 1;
1961         if (strcmp(fw, "BANC1G10"))
1962                 return 1;
1963
1964         return 0; /* blacklisted */
1965 }
1966
1967 /**
1968  *      ata_scsiop_mode_sense - Simulate MODE SENSE 6, 10 commands
1969  *      @args: device IDENTIFY data / SCSI command of interest.
1970  *      @rbuf: Response buffer, to which simulated SCSI cmd output is sent.
1971  *      @buflen: Response buffer length.
1972  *
1973  *      Simulate MODE SENSE commands. Assume this is invoked for direct
1974  *      access devices (e.g. disks) only. There should be no block
1975  *      descriptor for other device types.
1976  *
1977  *      LOCKING:
1978  *      spin_lock_irqsave(host lock)
1979  */
1980
1981 unsigned int ata_scsiop_mode_sense(struct ata_scsi_args *args, u8 *rbuf,
1982                                   unsigned int buflen)
1983 {
1984         struct ata_device *dev = args->dev;
1985         u8 *scsicmd = args->cmd->cmnd, *p, *last;
1986         const u8 sat_blk_desc[] = {
1987                 0, 0, 0, 0,     /* number of blocks: sat unspecified */
1988                 0,
1989                 0, 0x2, 0x0     /* block length: 512 bytes */
1990         };
1991         u8 pg, spg;
1992         unsigned int ebd, page_control, six_byte, output_len, alloc_len, minlen;
1993         u8 dpofua;
1994
1995         VPRINTK("ENTER\n");
1996
1997         six_byte = (scsicmd[0] == MODE_SENSE);
1998         ebd = !(scsicmd[1] & 0x8);      /* dbd bit inverted == edb */
1999         /*
2000          * LLBA bit in msense(10) ignored (compliant)
2001          */
2002
2003         page_control = scsicmd[2] >> 6;
2004         switch (page_control) {
2005         case 0: /* current */
2006                 break;  /* supported */
2007         case 3: /* saved */
2008                 goto saving_not_supp;
2009         case 1: /* changeable */
2010         case 2: /* defaults */
2011         default:
2012                 goto invalid_fld;
2013         }
2014
2015         if (six_byte) {
2016                 output_len = 4 + (ebd ? 8 : 0);
2017                 alloc_len = scsicmd[4];
2018         } else {
2019                 output_len = 8 + (ebd ? 8 : 0);
2020                 alloc_len = (scsicmd[7] << 8) + scsicmd[8];
2021         }
2022         minlen = (alloc_len < buflen) ? alloc_len : buflen;
2023
2024         p = rbuf + output_len;
2025         last = rbuf + minlen - 1;
2026
2027         pg = scsicmd[2] & 0x3f;
2028         spg = scsicmd[3];
2029         /*
2030          * No mode subpages supported (yet) but asking for _all_
2031          * subpages may be valid
2032          */
2033         if (spg && (spg != ALL_SUB_MPAGES))
2034                 goto invalid_fld;
2035
2036         switch(pg) {
2037         case RW_RECOVERY_MPAGE:
2038                 output_len += ata_msense_rw_recovery(&p, last);
2039                 break;
2040
2041         case CACHE_MPAGE:
2042                 output_len += ata_msense_caching(args->id, &p, last);
2043                 break;
2044
2045         case CONTROL_MPAGE: {
2046                 output_len += ata_msense_ctl_mode(&p, last);
2047                 break;
2048                 }
2049
2050         case ALL_MPAGES:
2051                 output_len += ata_msense_rw_recovery(&p, last);
2052                 output_len += ata_msense_caching(args->id, &p, last);
2053                 output_len += ata_msense_ctl_mode(&p, last);
2054                 break;
2055
2056         default:                /* invalid page code */
2057                 goto invalid_fld;
2058         }
2059
2060         if (minlen < 1)
2061                 return 0;
2062
2063         dpofua = 0;
2064         if (ata_dev_supports_fua(args->id) && (dev->flags & ATA_DFLAG_LBA48) &&
2065             (!(dev->flags & ATA_DFLAG_PIO) || dev->multi_count))
2066                 dpofua = 1 << 4;
2067
2068         if (six_byte) {
2069                 output_len--;
2070                 rbuf[0] = output_len;
2071                 if (minlen > 2)
2072                         rbuf[2] |= dpofua;
2073                 if (ebd) {
2074                         if (minlen > 3)
2075                                 rbuf[3] = sizeof(sat_blk_desc);
2076                         if (minlen > 11)
2077                                 memcpy(rbuf + 4, sat_blk_desc,
2078                                        sizeof(sat_blk_desc));
2079                 }
2080         } else {
2081                 output_len -= 2;
2082                 rbuf[0] = output_len >> 8;
2083                 if (minlen > 1)
2084                         rbuf[1] = output_len;
2085                 if (minlen > 3)
2086                         rbuf[3] |= dpofua;
2087                 if (ebd) {
2088                         if (minlen > 7)
2089                                 rbuf[7] = sizeof(sat_blk_desc);
2090                         if (minlen > 15)
2091                                 memcpy(rbuf + 8, sat_blk_desc,
2092                                        sizeof(sat_blk_desc));
2093                 }
2094         }
2095         return 0;
2096
2097 invalid_fld:
2098         ata_scsi_set_sense(args->cmd, ILLEGAL_REQUEST, 0x24, 0x0);
2099         /* "Invalid field in cbd" */
2100         return 1;
2101
2102 saving_not_supp:
2103         ata_scsi_set_sense(args->cmd, ILLEGAL_REQUEST, 0x39, 0x0);
2104          /* "Saving parameters not supported" */
2105         return 1;
2106 }
2107
2108 /**
2109  *      ata_scsiop_read_cap - Simulate READ CAPACITY[ 16] commands
2110  *      @args: device IDENTIFY data / SCSI command of interest.
2111  *      @rbuf: Response buffer, to which simulated SCSI cmd output is sent.
2112  *      @buflen: Response buffer length.
2113  *
2114  *      Simulate READ CAPACITY commands.
2115  *
2116  *      LOCKING:
2117  *      None.
2118  */
2119 unsigned int ata_scsiop_read_cap(struct ata_scsi_args *args, u8 *rbuf,
2120                                  unsigned int buflen)
2121 {
2122         u64 last_lba = args->dev->n_sectors - 1; /* LBA of the last block */
2123
2124         VPRINTK("ENTER\n");
2125
2126         if (args->cmd->cmnd[0] == READ_CAPACITY) {
2127                 if (last_lba >= 0xffffffffULL)
2128                         last_lba = 0xffffffff;
2129
2130                 /* sector count, 32-bit */
2131                 ATA_SCSI_RBUF_SET(0, last_lba >> (8 * 3));
2132                 ATA_SCSI_RBUF_SET(1, last_lba >> (8 * 2));
2133                 ATA_SCSI_RBUF_SET(2, last_lba >> (8 * 1));
2134                 ATA_SCSI_RBUF_SET(3, last_lba);
2135
2136                 /* sector size */
2137                 ATA_SCSI_RBUF_SET(6, ATA_SECT_SIZE >> 8);
2138                 ATA_SCSI_RBUF_SET(7, ATA_SECT_SIZE);
2139         } else {
2140                 /* sector count, 64-bit */
2141                 ATA_SCSI_RBUF_SET(0, last_lba >> (8 * 7));
2142                 ATA_SCSI_RBUF_SET(1, last_lba >> (8 * 6));
2143                 ATA_SCSI_RBUF_SET(2, last_lba >> (8 * 5));
2144                 ATA_SCSI_RBUF_SET(3, last_lba >> (8 * 4));
2145                 ATA_SCSI_RBUF_SET(4, last_lba >> (8 * 3));
2146                 ATA_SCSI_RBUF_SET(5, last_lba >> (8 * 2));
2147                 ATA_SCSI_RBUF_SET(6, last_lba >> (8 * 1));
2148                 ATA_SCSI_RBUF_SET(7, last_lba);
2149
2150                 /* sector size */
2151                 ATA_SCSI_RBUF_SET(10, ATA_SECT_SIZE >> 8);
2152                 ATA_SCSI_RBUF_SET(11, ATA_SECT_SIZE);
2153         }
2154
2155         return 0;
2156 }
2157
2158 /**
2159  *      ata_scsiop_report_luns - Simulate REPORT LUNS command
2160  *      @args: device IDENTIFY data / SCSI command of interest.
2161  *      @rbuf: Response buffer, to which simulated SCSI cmd output is sent.
2162  *      @buflen: Response buffer length.
2163  *
2164  *      Simulate REPORT LUNS command.
2165  *
2166  *      LOCKING:
2167  *      spin_lock_irqsave(host lock)
2168  */
2169
2170 unsigned int ata_scsiop_report_luns(struct ata_scsi_args *args, u8 *rbuf,
2171                                    unsigned int buflen)
2172 {
2173         VPRINTK("ENTER\n");
2174         rbuf[3] = 8;    /* just one lun, LUN 0, size 8 bytes */
2175
2176         return 0;
2177 }
2178
2179 /**
2180  *      ata_scsi_set_sense - Set SCSI sense data and status
2181  *      @cmd: SCSI request to be handled
2182  *      @sk: SCSI-defined sense key
2183  *      @asc: SCSI-defined additional sense code
2184  *      @ascq: SCSI-defined additional sense code qualifier
2185  *
2186  *      Helper function that builds a valid fixed format, current
2187  *      response code and the given sense key (sk), additional sense
2188  *      code (asc) and additional sense code qualifier (ascq) with
2189  *      a SCSI command status of %SAM_STAT_CHECK_CONDITION and
2190  *      DRIVER_SENSE set in the upper bits of scsi_cmnd::result .
2191  *
2192  *      LOCKING:
2193  *      Not required
2194  */
2195
2196 void ata_scsi_set_sense(struct scsi_cmnd *cmd, u8 sk, u8 asc, u8 ascq)
2197 {
2198         cmd->result = (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION;
2199
2200         cmd->sense_buffer[0] = 0x70;    /* fixed format, current */
2201         cmd->sense_buffer[2] = sk;
2202         cmd->sense_buffer[7] = 18 - 8;  /* additional sense length */
2203         cmd->sense_buffer[12] = asc;
2204         cmd->sense_buffer[13] = ascq;
2205 }
2206
2207 /**
2208  *      ata_scsi_badcmd - End a SCSI request with an error
2209  *      @cmd: SCSI request to be handled
2210  *      @done: SCSI command completion function
2211  *      @asc: SCSI-defined additional sense code
2212  *      @ascq: SCSI-defined additional sense code qualifier
2213  *
2214  *      Helper function that completes a SCSI command with
2215  *      %SAM_STAT_CHECK_CONDITION, with a sense key %ILLEGAL_REQUEST
2216  *      and the specified additional sense codes.
2217  *
2218  *      LOCKING:
2219  *      spin_lock_irqsave(host lock)
2220  */
2221
2222 void ata_scsi_badcmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *), u8 asc, u8 ascq)
2223 {
2224         DPRINTK("ENTER\n");
2225         ata_scsi_set_sense(cmd, ILLEGAL_REQUEST, asc, ascq);
2226
2227         done(cmd);
2228 }
2229
2230 static void atapi_sense_complete(struct ata_queued_cmd *qc)
2231 {
2232         if (qc->err_mask && ((qc->err_mask & AC_ERR_DEV) == 0)) {
2233                 /* FIXME: not quite right; we don't want the
2234                  * translation of taskfile registers into
2235                  * a sense descriptors, since that's only
2236                  * correct for ATA, not ATAPI
2237                  */
2238                 ata_gen_passthru_sense(qc);
2239         }
2240
2241         qc->scsidone(qc->scsicmd);
2242         ata_qc_free(qc);
2243 }
2244
2245 /* is it pointless to prefer PIO for "safety reasons"? */
2246 static inline int ata_pio_use_silly(struct ata_port *ap)
2247 {
2248         return (ap->flags & ATA_FLAG_PIO_DMA);
2249 }
2250
2251 static void atapi_request_sense(struct ata_queued_cmd *qc)
2252 {
2253         struct ata_port *ap = qc->ap;
2254         struct scsi_cmnd *cmd = qc->scsicmd;
2255
2256         DPRINTK("ATAPI request sense\n");
2257
2258         /* FIXME: is this needed? */
2259         memset(cmd->sense_buffer, 0, sizeof(cmd->sense_buffer));
2260
2261         ap->ops->tf_read(ap, &qc->tf);
2262
2263         /* fill these in, for the case where they are -not- overwritten */
2264         cmd->sense_buffer[0] = 0x70;
2265         cmd->sense_buffer[2] = qc->tf.feature >> 4;
2266
2267         ata_qc_reinit(qc);
2268
2269         ata_sg_init_one(qc, cmd->sense_buffer, sizeof(cmd->sense_buffer));
2270         qc->dma_dir = DMA_FROM_DEVICE;
2271
2272         memset(&qc->cdb, 0, qc->dev->cdb_len);
2273         qc->cdb[0] = REQUEST_SENSE;
2274         qc->cdb[4] = SCSI_SENSE_BUFFERSIZE;
2275
2276         qc->tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
2277         qc->tf.command = ATA_CMD_PACKET;
2278
2279         if (ata_pio_use_silly(ap)) {
2280                 qc->tf.protocol = ATA_PROT_ATAPI_DMA;
2281                 qc->tf.feature |= ATAPI_PKT_DMA;
2282         } else {
2283                 qc->tf.protocol = ATA_PROT_ATAPI;
2284                 qc->tf.lbam = SCSI_SENSE_BUFFERSIZE;
2285                 qc->tf.lbah = 0;
2286         }
2287         qc->nbytes = SCSI_SENSE_BUFFERSIZE;
2288
2289         qc->complete_fn = atapi_sense_complete;
2290
2291         ata_qc_issue(qc);
2292
2293         DPRINTK("EXIT\n");
2294 }
2295
2296 static void atapi_qc_complete(struct ata_queued_cmd *qc)
2297 {
2298         struct scsi_cmnd *cmd = qc->scsicmd;
2299         unsigned int err_mask = qc->err_mask;
2300
2301         VPRINTK("ENTER, err_mask 0x%X\n", err_mask);
2302
2303         /* handle completion from new EH */
2304         if (unlikely(qc->ap->ops->error_handler &&
2305                      (err_mask || qc->flags & ATA_QCFLAG_SENSE_VALID))) {
2306
2307                 if (!(qc->flags & ATA_QCFLAG_SENSE_VALID)) {
2308                         /* FIXME: not quite right; we don't want the
2309                          * translation of taskfile registers into a
2310                          * sense descriptors, since that's only
2311                          * correct for ATA, not ATAPI
2312                          */
2313                         ata_gen_passthru_sense(qc);
2314                 }
2315
2316                 /* SCSI EH automatically locks door if sdev->locked is
2317                  * set.  Sometimes door lock request continues to
2318                  * fail, for example, when no media is present.  This
2319                  * creates a loop - SCSI EH issues door lock which
2320                  * fails and gets invoked again to acquire sense data
2321                  * for the failed command.
2322                  *
2323                  * If door lock fails, always clear sdev->locked to
2324                  * avoid this infinite loop.
2325                  */
2326                 if (qc->cdb[0] == ALLOW_MEDIUM_REMOVAL)
2327                         qc->dev->sdev->locked = 0;
2328
2329                 qc->scsicmd->result = SAM_STAT_CHECK_CONDITION;
2330                 qc->scsidone(cmd);
2331                 ata_qc_free(qc);
2332                 return;
2333         }
2334
2335         /* successful completion or old EH failure path */
2336         if (unlikely(err_mask & AC_ERR_DEV)) {
2337                 cmd->result = SAM_STAT_CHECK_CONDITION;
2338                 atapi_request_sense(qc);
2339                 return;
2340         } else if (unlikely(err_mask)) {
2341                 /* FIXME: not quite right; we don't want the
2342                  * translation of taskfile registers into
2343                  * a sense descriptors, since that's only
2344                  * correct for ATA, not ATAPI
2345                  */
2346                 ata_gen_passthru_sense(qc);
2347         } else {
2348                 u8 *scsicmd = cmd->cmnd;
2349
2350                 if ((scsicmd[0] == INQUIRY) && ((scsicmd[1] & 0x03) == 0)) {
2351                         u8 *buf = NULL;
2352                         unsigned int buflen;
2353
2354                         buflen = ata_scsi_rbuf_get(cmd, &buf);
2355
2356         /* ATAPI devices typically report zero for their SCSI version,
2357          * and sometimes deviate from the spec WRT response data
2358          * format.  If SCSI version is reported as zero like normal,
2359          * then we make the following fixups:  1) Fake MMC-5 version,
2360          * to indicate to the Linux scsi midlayer this is a modern
2361          * device.  2) Ensure response data format / ATAPI information
2362          * are always correct.
2363          */
2364                         if (buf[2] == 0) {
2365                                 buf[2] = 0x5;
2366                                 buf[3] = 0x32;
2367                         }
2368
2369                         ata_scsi_rbuf_put(cmd, buf);
2370                 }
2371
2372                 cmd->result = SAM_STAT_GOOD;
2373         }
2374
2375         qc->scsidone(cmd);
2376         ata_qc_free(qc);
2377 }
2378 /**
2379  *      atapi_xlat - Initialize PACKET taskfile
2380  *      @qc: command structure to be initialized
2381  *
2382  *      LOCKING:
2383  *      spin_lock_irqsave(host lock)
2384  *
2385  *      RETURNS:
2386  *      Zero on success, non-zero on failure.
2387  */
2388 static unsigned int atapi_xlat(struct ata_queued_cmd *qc)
2389 {
2390         struct scsi_cmnd *scmd = qc->scsicmd;
2391         struct ata_device *dev = qc->dev;
2392         int using_pio = (dev->flags & ATA_DFLAG_PIO);
2393         int nodata = (scmd->sc_data_direction == DMA_NONE);
2394         unsigned int nbytes;
2395
2396         memset(qc->cdb, 0, dev->cdb_len);
2397         memcpy(qc->cdb, scmd->cmnd, scmd->cmd_len);
2398
2399         qc->complete_fn = atapi_qc_complete;
2400
2401         qc->tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
2402         if (scmd->sc_data_direction == DMA_TO_DEVICE) {
2403                 qc->tf.flags |= ATA_TFLAG_WRITE;
2404                 DPRINTK("direction: write\n");
2405         }
2406
2407         qc->tf.command = ATA_CMD_PACKET;
2408         qc->nbytes = scsi_bufflen(scmd);
2409
2410         /* check whether ATAPI DMA is safe */
2411         if (!using_pio && ata_check_atapi_dma(qc))
2412                 using_pio = 1;
2413
2414         /* Some controller variants snoop this value for Packet transfers
2415            to do state machine and FIFO management. Thus we want to set it
2416            properly, and for DMA where it is effectively meaningless */
2417         nbytes = min(qc->nbytes, (unsigned int)63 * 1024);
2418
2419         qc->tf.lbam = (nbytes & 0xFF);
2420         qc->tf.lbah = (nbytes >> 8);
2421
2422         if (using_pio || nodata) {
2423                 /* no data, or PIO data xfer */
2424                 if (nodata)
2425                         qc->tf.protocol = ATA_PROT_ATAPI_NODATA;
2426                 else
2427                         qc->tf.protocol = ATA_PROT_ATAPI;
2428         } else {
2429                 /* DMA data xfer */
2430                 qc->tf.protocol = ATA_PROT_ATAPI_DMA;
2431                 qc->tf.feature |= ATAPI_PKT_DMA;
2432
2433                 if (atapi_dmadir && (scmd->sc_data_direction != DMA_TO_DEVICE))
2434                         /* some SATA bridges need us to indicate data xfer direction */
2435                         qc->tf.feature |= ATAPI_DMADIR;
2436         }
2437
2438
2439         /* FIXME: We need to translate 0x05 READ_BLOCK_LIMITS to a MODE_SENSE
2440            as ATAPI tape drives don't get this right otherwise */
2441         return 0;
2442 }
2443
2444 static struct ata_device *ata_find_dev(struct ata_port *ap, int devno)
2445 {
2446         if (ap->nr_pmp_links == 0) {
2447                 if (likely(devno < ata_link_max_devices(&ap->link)))
2448                         return &ap->link.device[devno];
2449         } else {
2450                 if (likely(devno < ap->nr_pmp_links))
2451                         return &ap->pmp_link[devno].device[0];
2452         }
2453
2454         return NULL;
2455 }
2456
2457 static struct ata_device *__ata_scsi_find_dev(struct ata_port *ap,
2458                                               const struct scsi_device *scsidev)
2459 {
2460         int devno;
2461
2462         /* skip commands not addressed to targets we simulate */
2463         if (ap->nr_pmp_links == 0) {
2464                 if (unlikely(scsidev->channel || scsidev->lun))
2465                         return NULL;
2466                 devno = scsidev->id;
2467         } else {
2468                 if (unlikely(scsidev->id || scsidev->lun))
2469                         return NULL;
2470                 devno = scsidev->channel;
2471         }
2472
2473         return ata_find_dev(ap, devno);
2474 }
2475
2476 /**
2477  *      ata_scsi_dev_enabled - determine if device is enabled
2478  *      @dev: ATA device
2479  *
2480  *      Determine if commands should be sent to the specified device.
2481  *
2482  *      LOCKING:
2483  *      spin_lock_irqsave(host lock)
2484  *
2485  *      RETURNS:
2486  *      0 if commands are not allowed / 1 if commands are allowed
2487  */
2488
2489 static int ata_scsi_dev_enabled(struct ata_device *dev)
2490 {
2491         if (unlikely(!ata_dev_enabled(dev)))
2492                 return 0;
2493
2494         if (!atapi_enabled || (dev->link->ap->flags & ATA_FLAG_NO_ATAPI)) {
2495                 if (unlikely(dev->class == ATA_DEV_ATAPI)) {
2496                         ata_dev_printk(dev, KERN_WARNING,
2497                                        "WARNING: ATAPI is %s, device ignored.\n",
2498                                        atapi_enabled ? "not supported with this driver" : "disabled");
2499                         return 0;
2500                 }
2501         }
2502
2503         return 1;
2504 }
2505
2506 /**
2507  *      ata_scsi_find_dev - lookup ata_device from scsi_cmnd
2508  *      @ap: ATA port to which the device is attached
2509  *      @scsidev: SCSI device from which we derive the ATA device
2510  *
2511  *      Given various information provided in struct scsi_cmnd,
2512  *      map that onto an ATA bus, and using that mapping
2513  *      determine which ata_device is associated with the
2514  *      SCSI command to be sent.
2515  *
2516  *      LOCKING:
2517  *      spin_lock_irqsave(host lock)
2518  *
2519  *      RETURNS:
2520  *      Associated ATA device, or %NULL if not found.
2521  */
2522 static struct ata_device *
2523 ata_scsi_find_dev(struct ata_port *ap, const struct scsi_device *scsidev)
2524 {
2525         struct ata_device *dev = __ata_scsi_find_dev(ap, scsidev);
2526
2527         if (unlikely(!dev || !ata_scsi_dev_enabled(dev)))
2528                 return NULL;
2529
2530         return dev;
2531 }
2532
2533 /*
2534  *      ata_scsi_map_proto - Map pass-thru protocol value to taskfile value.
2535  *      @byte1: Byte 1 from pass-thru CDB.
2536  *
2537  *      RETURNS:
2538  *      ATA_PROT_UNKNOWN if mapping failed/unimplemented, protocol otherwise.
2539  */
2540 static u8
2541 ata_scsi_map_proto(u8 byte1)
2542 {
2543         switch((byte1 & 0x1e) >> 1) {
2544         case 3:         /* Non-data */
2545                 return ATA_PROT_NODATA;
2546
2547         case 6:         /* DMA */
2548         case 10:        /* UDMA Data-in */
2549         case 11:        /* UDMA Data-Out */
2550                 return ATA_PROT_DMA;
2551
2552         case 4:         /* PIO Data-in */
2553         case 5:         /* PIO Data-out */
2554                 return ATA_PROT_PIO;
2555
2556         case 0:         /* Hard Reset */
2557         case 1:         /* SRST */
2558         case 8:         /* Device Diagnostic */
2559         case 9:         /* Device Reset */
2560         case 7:         /* DMA Queued */
2561         case 12:        /* FPDMA */
2562         case 15:        /* Return Response Info */
2563         default:        /* Reserved */
2564                 break;
2565         }
2566
2567         return ATA_PROT_UNKNOWN;
2568 }
2569
2570 /**
2571  *      ata_scsi_pass_thru - convert ATA pass-thru CDB to taskfile
2572  *      @qc: command structure to be initialized
2573  *
2574  *      Handles either 12 or 16-byte versions of the CDB.
2575  *
2576  *      RETURNS:
2577  *      Zero on success, non-zero on failure.
2578  */
2579 static unsigned int ata_scsi_pass_thru(struct ata_queued_cmd *qc)
2580 {
2581         struct ata_taskfile *tf = &(qc->tf);
2582         struct scsi_cmnd *scmd = qc->scsicmd;
2583         struct ata_device *dev = qc->dev;
2584         const u8 *cdb = scmd->cmnd;
2585
2586         if ((tf->protocol = ata_scsi_map_proto(cdb[1])) == ATA_PROT_UNKNOWN)
2587                 goto invalid_fld;
2588
2589         /* We may not issue DMA commands if no DMA mode is set */
2590         if (tf->protocol == ATA_PROT_DMA && dev->dma_mode == 0)
2591                 goto invalid_fld;
2592
2593         /*
2594          * 12 and 16 byte CDBs use different offsets to
2595          * provide the various register values.
2596          */
2597         if (cdb[0] == ATA_16) {
2598                 /*
2599                  * 16-byte CDB - may contain extended commands.
2600                  *
2601                  * If that is the case, copy the upper byte register values.
2602                  */
2603                 if (cdb[1] & 0x01) {
2604                         tf->hob_feature = cdb[3];
2605                         tf->hob_nsect = cdb[5];
2606                         tf->hob_lbal = cdb[7];
2607                         tf->hob_lbam = cdb[9];
2608                         tf->hob_lbah = cdb[11];
2609                         tf->flags |= ATA_TFLAG_LBA48;
2610                 } else
2611                         tf->flags &= ~ATA_TFLAG_LBA48;
2612
2613                 /*
2614                  * Always copy low byte, device and command registers.
2615                  */
2616                 tf->feature = cdb[4];
2617                 tf->nsect = cdb[6];
2618                 tf->lbal = cdb[8];
2619                 tf->lbam = cdb[10];
2620                 tf->lbah = cdb[12];
2621                 tf->device = cdb[13];
2622                 tf->command = cdb[14];
2623         } else {
2624                 /*
2625                  * 12-byte CDB - incapable of extended commands.
2626                  */
2627                 tf->flags &= ~ATA_TFLAG_LBA48;
2628
2629                 tf->feature = cdb[3];
2630                 tf->nsect = cdb[4];
2631                 tf->lbal = cdb[5];
2632                 tf->lbam = cdb[6];
2633                 tf->lbah = cdb[7];
2634                 tf->device = cdb[8];
2635                 tf->command = cdb[9];
2636         }
2637
2638         /* enforce correct master/slave bit */
2639         tf->device = dev->devno ?
2640                 tf->device | ATA_DEV1 : tf->device & ~ATA_DEV1;
2641
2642         /* sanity check for pio multi commands */
2643         if ((cdb[1] & 0xe0) && !is_multi_taskfile(tf))
2644                 goto invalid_fld;
2645
2646         if (is_multi_taskfile(tf)) {
2647                 unsigned int multi_count = 1 << (cdb[1] >> 5);
2648
2649                 /* compare the passed through multi_count
2650                  * with the cached multi_count of libata
2651                  */
2652                 if (multi_count != dev->multi_count)
2653                         ata_dev_printk(dev, KERN_WARNING,
2654                                        "invalid multi_count %u ignored\n",
2655                                        multi_count);
2656         }
2657
2658         /* READ/WRITE LONG use a non-standard sect_size */
2659         qc->sect_size = ATA_SECT_SIZE;
2660         switch (tf->command) {
2661         case ATA_CMD_READ_LONG:
2662         case ATA_CMD_READ_LONG_ONCE:
2663         case ATA_CMD_WRITE_LONG:
2664         case ATA_CMD_WRITE_LONG_ONCE:
2665                 if (tf->protocol != ATA_PROT_PIO || tf->nsect != 1)
2666                         goto invalid_fld;
2667                 qc->sect_size = scsi_bufflen(scmd);
2668         }
2669
2670         /*
2671          * Filter SET_FEATURES - XFER MODE command -- otherwise,
2672          * SET_FEATURES - XFER MODE must be preceded/succeeded
2673          * by an update to hardware-specific registers for each
2674          * controller (i.e. the reason for ->set_piomode(),
2675          * ->set_dmamode(), and ->post_set_mode() hooks).
2676          */
2677         if ((tf->command == ATA_CMD_SET_FEATURES)
2678          && (tf->feature == SETFEATURES_XFER))
2679                 goto invalid_fld;
2680
2681         /*
2682          * Set flags so that all registers will be written,
2683          * and pass on write indication (used for PIO/DMA
2684          * setup.)
2685          */
2686         tf->flags |= (ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE);
2687
2688         if (scmd->sc_data_direction == DMA_TO_DEVICE)
2689                 tf->flags |= ATA_TFLAG_WRITE;
2690
2691         /*
2692          * Set transfer length.
2693          *
2694          * TODO: find out if we need to do more here to
2695          *       cover scatter/gather case.
2696          */
2697         qc->nbytes = scsi_bufflen(scmd);
2698
2699         /* request result TF */
2700         qc->flags |= ATA_QCFLAG_RESULT_TF;
2701
2702         return 0;
2703
2704  invalid_fld:
2705         ata_scsi_set_sense(scmd, ILLEGAL_REQUEST, 0x24, 0x00);
2706         /* "Invalid field in cdb" */
2707         return 1;
2708 }
2709
2710 /**
2711  *      ata_get_xlat_func - check if SCSI to ATA translation is possible
2712  *      @dev: ATA device
2713  *      @cmd: SCSI command opcode to consider
2714  *
2715  *      Look up the SCSI command given, and determine whether the
2716  *      SCSI command is to be translated or simulated.
2717  *
2718  *      RETURNS:
2719  *      Pointer to translation function if possible, %NULL if not.
2720  */
2721
2722 static inline ata_xlat_func_t ata_get_xlat_func(struct ata_device *dev, u8 cmd)
2723 {
2724         switch (cmd) {
2725         case READ_6:
2726         case READ_10:
2727         case READ_16:
2728
2729         case WRITE_6:
2730         case WRITE_10:
2731         case WRITE_16:
2732                 return ata_scsi_rw_xlat;
2733
2734         case SYNCHRONIZE_CACHE:
2735                 if (ata_try_flush_cache(dev))
2736                         return ata_scsi_flush_xlat;
2737                 break;
2738
2739         case VERIFY:
2740         case VERIFY_16:
2741                 return ata_scsi_verify_xlat;
2742
2743         case ATA_12:
2744         case ATA_16:
2745                 return ata_scsi_pass_thru;
2746
2747         case START_STOP:
2748                 return ata_scsi_start_stop_xlat;
2749         }
2750
2751         return NULL;
2752 }
2753
2754 /**
2755  *      ata_scsi_dump_cdb - dump SCSI command contents to dmesg
2756  *      @ap: ATA port to which the command was being sent
2757  *      @cmd: SCSI command to dump
2758  *
2759  *      Prints the contents of a SCSI command via printk().
2760  */
2761
2762 static inline void ata_scsi_dump_cdb(struct ata_port *ap,
2763                                      struct scsi_cmnd *cmd)
2764 {
2765 #ifdef ATA_DEBUG
2766         struct scsi_device *scsidev = cmd->device;
2767         u8 *scsicmd = cmd->cmnd;
2768
2769         DPRINTK("CDB (%u:%d,%d,%d) %02x %02x %02x %02x %02x %02x %02x %02x %02x\n",
2770                 ap->print_id,
2771                 scsidev->channel, scsidev->id, scsidev->lun,
2772                 scsicmd[0], scsicmd[1], scsicmd[2], scsicmd[3],
2773                 scsicmd[4], scsicmd[5], scsicmd[6], scsicmd[7],
2774                 scsicmd[8]);
2775 #endif
2776 }
2777
2778 static inline int __ata_scsi_queuecmd(struct scsi_cmnd *scmd,
2779                                       void (*done)(struct scsi_cmnd *),
2780                                       struct ata_device *dev)
2781 {
2782         u8 scsi_op = scmd->cmnd[0];
2783         ata_xlat_func_t xlat_func;
2784         int rc = 0;
2785
2786         if (dev->class == ATA_DEV_ATA) {
2787                 if (unlikely(!scmd->cmd_len || scmd->cmd_len > dev->cdb_len))
2788                         goto bad_cdb_len;
2789
2790                 xlat_func = ata_get_xlat_func(dev, scsi_op);
2791         } else {
2792                 if (unlikely(!scmd->cmd_len))
2793                         goto bad_cdb_len;
2794
2795                 xlat_func = NULL;
2796                 if (likely((scsi_op != ATA_16) || !atapi_passthru16)) {
2797                         /* relay SCSI command to ATAPI device */
2798                         if (unlikely(scmd->cmd_len > dev->cdb_len))
2799                                 goto bad_cdb_len;
2800
2801                         xlat_func = atapi_xlat;
2802                 } else {
2803                         /* ATA_16 passthru, treat as an ATA command */
2804                         if (unlikely(scmd->cmd_len > 16))
2805                                 goto bad_cdb_len;
2806
2807                         xlat_func = ata_get_xlat_func(dev, scsi_op);
2808                 }
2809         }
2810
2811         if (xlat_func)
2812                 rc = ata_scsi_translate(dev, scmd, done, xlat_func);
2813         else
2814                 ata_scsi_simulate(dev, scmd, done);
2815
2816         return rc;
2817
2818  bad_cdb_len:
2819         DPRINTK("bad CDB len=%u, scsi_op=0x%02x, max=%u\n",
2820                 scmd->cmd_len, scsi_op, dev->cdb_len);
2821         scmd->result = DID_ERROR << 16;
2822         done(scmd);
2823         return 0;
2824 }
2825
2826 /**
2827  *      ata_scsi_queuecmd - Issue SCSI cdb to libata-managed device
2828  *      @cmd: SCSI command to be sent
2829  *      @done: Completion function, called when command is complete
2830  *
2831  *      In some cases, this function translates SCSI commands into
2832  *      ATA taskfiles, and queues the taskfiles to be sent to
2833  *      hardware.  In other cases, this function simulates a
2834  *      SCSI device by evaluating and responding to certain
2835  *      SCSI commands.  This creates the overall effect of
2836  *      ATA and ATAPI devices appearing as SCSI devices.
2837  *
2838  *      LOCKING:
2839  *      Releases scsi-layer-held lock, and obtains host lock.
2840  *
2841  *      RETURNS:
2842  *      Return value from __ata_scsi_queuecmd() if @cmd can be queued,
2843  *      0 otherwise.
2844  */
2845 int ata_scsi_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *))
2846 {
2847         struct ata_port *ap;
2848         struct ata_device *dev;
2849         struct scsi_device *scsidev = cmd->device;
2850         struct Scsi_Host *shost = scsidev->host;
2851         int rc = 0;
2852
2853         ap = ata_shost_to_port(shost);
2854
2855         spin_unlock(shost->host_lock);
2856         spin_lock(ap->lock);
2857
2858         ata_scsi_dump_cdb(ap, cmd);
2859
2860         dev = ata_scsi_find_dev(ap, scsidev);
2861         if (likely(dev))
2862                 rc = __ata_scsi_queuecmd(cmd, done, dev);
2863         else {
2864                 cmd->result = (DID_BAD_TARGET << 16);
2865                 done(cmd);
2866         }
2867
2868         spin_unlock(ap->lock);
2869         spin_lock(shost->host_lock);
2870         return rc;
2871 }
2872
2873 /**
2874  *      ata_scsi_simulate - simulate SCSI command on ATA device
2875  *      @dev: the target device
2876  *      @cmd: SCSI command being sent to device.
2877  *      @done: SCSI command completion function.
2878  *
2879  *      Interprets and directly executes a select list of SCSI commands
2880  *      that can be handled internally.
2881  *
2882  *      LOCKING:
2883  *      spin_lock_irqsave(host lock)
2884  */
2885
2886 void ata_scsi_simulate(struct ata_device *dev, struct scsi_cmnd *cmd,
2887                       void (*done)(struct scsi_cmnd *))
2888 {
2889         struct ata_scsi_args args;
2890         const u8 *scsicmd = cmd->cmnd;
2891         u8 tmp8;
2892
2893         args.dev = dev;
2894         args.id = dev->id;
2895         args.cmd = cmd;
2896         args.done = done;
2897
2898         switch(scsicmd[0]) {
2899         /* TODO: worth improving? */
2900         case FORMAT_UNIT:
2901                 ata_scsi_invalid_field(cmd, done);
2902                 break;
2903
2904         case INQUIRY:
2905                 if (scsicmd[1] & 2)                /* is CmdDt set?  */
2906                         ata_scsi_invalid_field(cmd, done);
2907                 else if ((scsicmd[1] & 1) == 0)    /* is EVPD clear? */
2908                         ata_scsi_rbuf_fill(&args, ata_scsiop_inq_std);
2909                 else switch (scsicmd[2]) {
2910                 case 0x00:
2911                         ata_scsi_rbuf_fill(&args, ata_scsiop_inq_00);
2912                         break;
2913                 case 0x80:
2914                         ata_scsi_rbuf_fill(&args, ata_scsiop_inq_80);
2915                         break;
2916                 case 0x83:
2917                         ata_scsi_rbuf_fill(&args, ata_scsiop_inq_83);
2918                         break;
2919                 case 0x89:
2920                         ata_scsi_rbuf_fill(&args, ata_scsiop_inq_89);
2921                         break;
2922                 default:
2923                         ata_scsi_invalid_field(cmd, done);
2924                         break;
2925                 }
2926                 break;
2927
2928         case MODE_SENSE:
2929         case MODE_SENSE_10:
2930                 ata_scsi_rbuf_fill(&args, ata_scsiop_mode_sense);
2931                 break;
2932
2933         case MODE_SELECT:       /* unconditionally return */
2934         case MODE_SELECT_10:    /* bad-field-in-cdb */
2935                 ata_scsi_invalid_field(cmd, done);
2936                 break;
2937
2938         case READ_CAPACITY:
2939                 ata_scsi_rbuf_fill(&args, ata_scsiop_read_cap);
2940                 break;
2941
2942         case SERVICE_ACTION_IN:
2943                 if ((scsicmd[1] & 0x1f) == SAI_READ_CAPACITY_16)
2944                         ata_scsi_rbuf_fill(&args, ata_scsiop_read_cap);
2945                 else
2946                         ata_scsi_invalid_field(cmd, done);
2947                 break;
2948
2949         case REPORT_LUNS:
2950                 ata_scsi_rbuf_fill(&args, ata_scsiop_report_luns);
2951                 break;
2952
2953         case REQUEST_SENSE:
2954                 ata_scsi_set_sense(cmd, 0, 0, 0);
2955                 cmd->result = (DRIVER_SENSE << 24);
2956                 done(cmd);
2957                 break;
2958
2959         /* if we reach this, then writeback caching is disabled,
2960          * turning this into a no-op.
2961          */
2962         case SYNCHRONIZE_CACHE:
2963                 /* fall through */
2964
2965         /* no-op's, complete with success */
2966         case REZERO_UNIT:
2967         case SEEK_6:
2968         case SEEK_10:
2969         case TEST_UNIT_READY:
2970                 ata_scsi_rbuf_fill(&args, ata_scsiop_noop);
2971                 break;
2972
2973         case SEND_DIAGNOSTIC:
2974                 tmp8 = scsicmd[1] & ~(1 << 3);
2975                 if ((tmp8 == 0x4) && (!scsicmd[3]) && (!scsicmd[4]))
2976                         ata_scsi_rbuf_fill(&args, ata_scsiop_noop);
2977                 else
2978                         ata_scsi_invalid_field(cmd, done);
2979                 break;
2980
2981         /* all other commands */
2982         default:
2983                 ata_scsi_set_sense(cmd, ILLEGAL_REQUEST, 0x20, 0x0);
2984                 /* "Invalid command operation code" */
2985                 done(cmd);
2986                 break;
2987         }
2988 }
2989
2990 int ata_scsi_add_hosts(struct ata_host *host, struct scsi_host_template *sht)
2991 {
2992         int i, rc;
2993
2994         for (i = 0; i < host->n_ports; i++) {
2995                 struct ata_port *ap = host->ports[i];
2996                 struct Scsi_Host *shost;
2997
2998                 rc = -ENOMEM;
2999                 shost = scsi_host_alloc(sht, sizeof(struct ata_port *));
3000                 if (!shost)
3001                         goto err_alloc;
3002
3003                 *(struct ata_port **)&shost->hostdata[0] = ap;
3004                 ap->scsi_host = shost;
3005
3006                 shost->transportt = &ata_scsi_transport_template;
3007                 shost->unique_id = ap->print_id;
3008                 shost->max_id = 16;
3009                 shost->max_lun = 1;
3010                 shost->max_channel = 1;
3011                 shost->max_cmd_len = 16;
3012
3013                 /* Schedule policy is determined by ->qc_defer()
3014                  * callback and it needs to see every deferred qc.
3015                  * Set host_blocked to 1 to prevent SCSI midlayer from
3016                  * automatically deferring requests.
3017                  */
3018                 shost->max_host_blocked = 1;
3019
3020                 rc = scsi_add_host(ap->scsi_host, ap->host->dev);
3021                 if (rc)
3022                         goto err_add;
3023         }
3024
3025         return 0;
3026
3027  err_add:
3028         scsi_host_put(host->ports[i]->scsi_host);
3029  err_alloc:
3030         while (--i >= 0) {
3031                 struct Scsi_Host *shost = host->ports[i]->scsi_host;
3032
3033                 scsi_remove_host(shost);
3034                 scsi_host_put(shost);
3035         }
3036         return rc;
3037 }
3038
3039 void ata_scsi_scan_host(struct ata_port *ap, int sync)
3040 {
3041         int tries = 5;
3042         struct ata_device *last_failed_dev = NULL;
3043         struct ata_link *link;
3044         struct ata_device *dev;
3045
3046         if (ap->flags & ATA_FLAG_DISABLED)
3047                 return;
3048
3049  repeat:
3050         ata_port_for_each_link(link, ap) {
3051                 ata_link_for_each_dev(dev, link) {
3052                         struct scsi_device *sdev;
3053                         int channel = 0, id = 0;
3054
3055                         if (!ata_dev_enabled(dev) || dev->sdev)
3056                                 continue;
3057
3058                         if (ata_is_host_link(link))
3059                                 id = dev->devno;
3060                         else
3061                                 channel = link->pmp;
3062
3063                         sdev = __scsi_add_device(ap->scsi_host, channel, id, 0,
3064                                                  NULL);
3065                         if (!IS_ERR(sdev)) {
3066                                 dev->sdev = sdev;
3067                                 scsi_device_put(sdev);
3068                         }
3069                 }
3070         }
3071
3072         /* If we scanned while EH was in progress or allocation
3073          * failure occurred, scan would have failed silently.  Check
3074          * whether all devices are attached.
3075          */
3076         ata_port_for_each_link(link, ap) {
3077                 ata_link_for_each_dev(dev, link) {
3078                         if (ata_dev_enabled(dev) && !dev->sdev)
3079                                 goto exit_loop;
3080                 }
3081         }
3082  exit_loop:
3083         if (!link)
3084                 return;
3085
3086         /* we're missing some SCSI devices */
3087         if (sync) {
3088                 /* If caller requested synchrnous scan && we've made
3089                  * any progress, sleep briefly and repeat.
3090                  */
3091                 if (dev != last_failed_dev) {
3092                         msleep(100);
3093                         last_failed_dev = dev;
3094                         goto repeat;
3095                 }
3096
3097                 /* We might be failing to detect boot device, give it
3098                  * a few more chances.
3099                  */
3100                 if (--tries) {
3101                         msleep(100);
3102                         goto repeat;
3103                 }
3104
3105                 ata_port_printk(ap, KERN_ERR, "WARNING: synchronous SCSI scan "
3106                                 "failed without making any progress,\n"
3107                                 "                  switching to async\n");
3108         }
3109
3110         queue_delayed_work(ata_aux_wq, &ap->hotplug_task,
3111                            round_jiffies_relative(HZ));
3112 }
3113
3114 /**
3115  *      ata_scsi_offline_dev - offline attached SCSI device
3116  *      @dev: ATA device to offline attached SCSI device for
3117  *
3118  *      This function is called from ata_eh_hotplug() and responsible
3119  *      for taking the SCSI device attached to @dev offline.  This
3120  *      function is called with host lock which protects dev->sdev
3121  *      against clearing.
3122  *
3123  *      LOCKING:
3124  *      spin_lock_irqsave(host lock)
3125  *
3126  *      RETURNS:
3127  *      1 if attached SCSI device exists, 0 otherwise.
3128  */
3129 int ata_scsi_offline_dev(struct ata_device *dev)
3130 {
3131         if (dev->sdev) {
3132                 scsi_device_set_state(dev->sdev, SDEV_OFFLINE);
3133                 return 1;
3134         }
3135         return 0;
3136 }
3137
3138 /**
3139  *      ata_scsi_remove_dev - remove attached SCSI device
3140  *      @dev: ATA device to remove attached SCSI device for
3141  *
3142  *      This function is called from ata_eh_scsi_hotplug() and
3143  *      responsible for removing the SCSI device attached to @dev.
3144  *
3145  *      LOCKING:
3146  *      Kernel thread context (may sleep).
3147  */
3148 static void ata_scsi_remove_dev(struct ata_device *dev)
3149 {
3150         struct ata_port *ap = dev->link->ap;
3151         struct scsi_device *sdev;
3152         unsigned long flags;
3153
3154         /* Alas, we need to grab scan_mutex to ensure SCSI device
3155          * state doesn't change underneath us and thus
3156          * scsi_device_get() always succeeds.  The mutex locking can
3157          * be removed if there is __scsi_device_get() interface which
3158          * increments reference counts regardless of device state.
3159          */
3160         mutex_lock(&ap->scsi_host->scan_mutex);
3161         spin_lock_irqsave(ap->lock, flags);
3162
3163         /* clearing dev->sdev is protected by host lock */
3164         sdev = dev->sdev;
3165         dev->sdev = NULL;
3166
3167         if (sdev) {
3168                 /* If user initiated unplug races with us, sdev can go
3169                  * away underneath us after the host lock and
3170                  * scan_mutex are released.  Hold onto it.
3171                  */
3172                 if (scsi_device_get(sdev) == 0) {
3173                         /* The following ensures the attached sdev is
3174                          * offline on return from ata_scsi_offline_dev()
3175                          * regardless it wins or loses the race
3176                          * against this function.
3177                          */
3178                         scsi_device_set_state(sdev, SDEV_OFFLINE);
3179                 } else {
3180                         WARN_ON(1);
3181                         sdev = NULL;
3182                 }
3183         }
3184
3185         spin_unlock_irqrestore(ap->lock, flags);
3186         mutex_unlock(&ap->scsi_host->scan_mutex);
3187
3188         if (sdev) {
3189                 ata_dev_printk(dev, KERN_INFO, "detaching (SCSI %s)\n",
3190                                sdev->sdev_gendev.bus_id);
3191
3192                 scsi_remove_device(sdev);
3193                 scsi_device_put(sdev);
3194         }
3195 }
3196
3197 static void ata_scsi_handle_link_detach(struct ata_link *link)
3198 {
3199         struct ata_port *ap = link->ap;
3200         struct ata_device *dev;
3201
3202         ata_link_for_each_dev(dev, link) {
3203                 unsigned long flags;
3204
3205                 if (!(dev->flags & ATA_DFLAG_DETACHED))
3206                         continue;
3207
3208                 spin_lock_irqsave(ap->lock, flags);
3209                 dev->flags &= ~ATA_DFLAG_DETACHED;
3210                 spin_unlock_irqrestore(ap->lock, flags);
3211
3212                 ata_scsi_remove_dev(dev);
3213         }
3214 }
3215
3216 /**
3217  *      ata_scsi_media_change_notify - send media change event
3218  *      @dev: Pointer to the disk device with media change event
3219  *
3220  *      Tell the block layer to send a media change notification
3221  *      event.
3222  *
3223  *      LOCKING:
3224  *      spin_lock_irqsave(host lock)
3225  */
3226 void ata_scsi_media_change_notify(struct ata_device *dev)
3227 {
3228 #ifdef OTHER_AN_PATCHES_HAVE_BEEN_APPLIED
3229         if (dev->sdev)
3230                 scsi_device_event_notify(dev->sdev, SDEV_MEDIA_CHANGE);
3231 #endif
3232 }
3233
3234 /**
3235  *      ata_scsi_hotplug - SCSI part of hotplug
3236  *      @work: Pointer to ATA port to perform SCSI hotplug on
3237  *
3238  *      Perform SCSI part of hotplug.  It's executed from a separate
3239  *      workqueue after EH completes.  This is necessary because SCSI
3240  *      hot plugging requires working EH and hot unplugging is
3241  *      synchronized with hot plugging with a mutex.
3242  *
3243  *      LOCKING:
3244  *      Kernel thread context (may sleep).
3245  */
3246 void ata_scsi_hotplug(struct work_struct *work)
3247 {
3248         struct ata_port *ap =
3249                 container_of(work, struct ata_port, hotplug_task.work);
3250         int i;
3251
3252         if (ap->pflags & ATA_PFLAG_UNLOADING) {
3253                 DPRINTK("ENTER/EXIT - unloading\n");
3254                 return;
3255         }
3256
3257         DPRINTK("ENTER\n");
3258
3259         /* Unplug detached devices.  We cannot use link iterator here
3260          * because PMP links have to be scanned even if PMP is
3261          * currently not attached.  Iterate manually.
3262          */
3263         ata_scsi_handle_link_detach(&ap->link);
3264         if (ap->pmp_link)
3265                 for (i = 0; i < SATA_PMP_MAX_PORTS; i++)
3266                         ata_scsi_handle_link_detach(&ap->pmp_link[i]);
3267
3268         /* scan for new ones */
3269         ata_scsi_scan_host(ap, 0);
3270
3271         DPRINTK("EXIT\n");
3272 }
3273
3274 /**
3275  *      ata_scsi_user_scan - indication for user-initiated bus scan
3276  *      @shost: SCSI host to scan
3277  *      @channel: Channel to scan
3278  *      @id: ID to scan
3279  *      @lun: LUN to scan
3280  *
3281  *      This function is called when user explicitly requests bus
3282  *      scan.  Set probe pending flag and invoke EH.
3283  *
3284  *      LOCKING:
3285  *      SCSI layer (we don't care)
3286  *
3287  *      RETURNS:
3288  *      Zero.
3289  */
3290 static int ata_scsi_user_scan(struct Scsi_Host *shost, unsigned int channel,
3291                               unsigned int id, unsigned int lun)
3292 {
3293         struct ata_port *ap = ata_shost_to_port(shost);
3294         unsigned long flags;
3295         int devno, rc = 0;
3296
3297         if (!ap->ops->error_handler)
3298                 return -EOPNOTSUPP;
3299
3300         if (lun != SCAN_WILD_CARD && lun)
3301                 return -EINVAL;
3302
3303         if (ap->nr_pmp_links == 0) {
3304                 if (channel != SCAN_WILD_CARD && channel)
3305                         return -EINVAL;
3306                 devno = id;
3307         } else {
3308                 if (id != SCAN_WILD_CARD && id)
3309                         return -EINVAL;
3310                 devno = channel;
3311         }
3312
3313         spin_lock_irqsave(ap->lock, flags);
3314
3315         if (devno == SCAN_WILD_CARD) {
3316                 struct ata_link *link;
3317
3318                 ata_port_for_each_link(link, ap) {
3319                         struct ata_eh_info *ehi = &link->eh_info;
3320                         ehi->probe_mask |= (1 << ata_link_max_devices(link)) - 1;
3321                         ehi->action |= ATA_EH_SOFTRESET;
3322                 }
3323         } else {
3324                 struct ata_device *dev = ata_find_dev(ap, devno);
3325
3326                 if (dev) {
3327                         struct ata_eh_info *ehi = &dev->link->eh_info;
3328                         ehi->probe_mask |= 1 << dev->devno;
3329                         ehi->action |= ATA_EH_SOFTRESET;
3330                         ehi->flags |= ATA_EHI_RESUME_LINK;
3331                 } else
3332                         rc = -EINVAL;
3333         }
3334
3335         if (rc == 0) {
3336                 ata_port_schedule_eh(ap);
3337                 spin_unlock_irqrestore(ap->lock, flags);
3338                 ata_port_wait_eh(ap);
3339         } else
3340                 spin_unlock_irqrestore(ap->lock, flags);
3341
3342         return rc;
3343 }
3344
3345 /**
3346  *      ata_scsi_dev_rescan - initiate scsi_rescan_device()
3347  *      @work: Pointer to ATA port to perform scsi_rescan_device()
3348  *
3349  *      After ATA pass thru (SAT) commands are executed successfully,
3350  *      libata need to propagate the changes to SCSI layer.  This
3351  *      function must be executed from ata_aux_wq such that sdev
3352  *      attach/detach don't race with rescan.
3353  *
3354  *      LOCKING:
3355  *      Kernel thread context (may sleep).
3356  */
3357 void ata_scsi_dev_rescan(struct work_struct *work)
3358 {
3359         struct ata_port *ap =
3360                 container_of(work, struct ata_port, scsi_rescan_task);
3361         struct ata_link *link;
3362         struct ata_device *dev;
3363         unsigned long flags;
3364
3365         spin_lock_irqsave(ap->lock, flags);
3366
3367         ata_port_for_each_link(link, ap) {
3368                 ata_link_for_each_dev(dev, link) {
3369                         struct scsi_device *sdev = dev->sdev;
3370
3371                         if (!ata_dev_enabled(dev) || !sdev)
3372                                 continue;
3373                         if (scsi_device_get(sdev))
3374                                 continue;
3375
3376                         spin_unlock_irqrestore(ap->lock, flags);
3377                         scsi_rescan_device(&(sdev->sdev_gendev));
3378                         scsi_device_put(sdev);
3379                         spin_lock_irqsave(ap->lock, flags);
3380                 }
3381         }
3382
3383         spin_unlock_irqrestore(ap->lock, flags);
3384 }
3385
3386 /**
3387  *      ata_sas_port_alloc - Allocate port for a SAS attached SATA device
3388  *      @host: ATA host container for all SAS ports
3389  *      @port_info: Information from low-level host driver
3390  *      @shost: SCSI host that the scsi device is attached to
3391  *
3392  *      LOCKING:
3393  *      PCI/etc. bus probe sem.
3394  *
3395  *      RETURNS:
3396  *      ata_port pointer on success / NULL on failure.
3397  */
3398
3399 struct ata_port *ata_sas_port_alloc(struct ata_host *host,
3400                                     struct ata_port_info *port_info,
3401                                     struct Scsi_Host *shost)
3402 {
3403         struct ata_port *ap;
3404
3405         ap = ata_port_alloc(host);
3406         if (!ap)
3407                 return NULL;
3408
3409         ap->port_no = 0;
3410         ap->lock = shost->host_lock;
3411         ap->pio_mask = port_info->pio_mask;
3412         ap->mwdma_mask = port_info->mwdma_mask;
3413         ap->udma_mask = port_info->udma_mask;
3414         ap->flags |= port_info->flags;
3415         ap->ops = port_info->port_ops;
3416         ap->cbl = ATA_CBL_SATA;
3417
3418         return ap;
3419 }
3420 EXPORT_SYMBOL_GPL(ata_sas_port_alloc);
3421
3422 /**
3423  *      ata_sas_port_start - Set port up for dma.
3424  *      @ap: Port to initialize
3425  *
3426  *      Called just after data structures for each port are
3427  *      initialized.  Allocates DMA pad.
3428  *
3429  *      May be used as the port_start() entry in ata_port_operations.
3430  *
3431  *      LOCKING:
3432  *      Inherited from caller.
3433  */
3434 int ata_sas_port_start(struct ata_port *ap)
3435 {
3436         return ata_pad_alloc(ap, ap->dev);
3437 }
3438 EXPORT_SYMBOL_GPL(ata_sas_port_start);
3439
3440 /**
3441  *      ata_port_stop - Undo ata_sas_port_start()
3442  *      @ap: Port to shut down
3443  *
3444  *      Frees the DMA pad.
3445  *
3446  *      May be used as the port_stop() entry in ata_port_operations.
3447  *
3448  *      LOCKING:
3449  *      Inherited from caller.
3450  */
3451
3452 void ata_sas_port_stop(struct ata_port *ap)
3453 {
3454         ata_pad_free(ap, ap->dev);
3455 }
3456 EXPORT_SYMBOL_GPL(ata_sas_port_stop);
3457
3458 /**
3459  *      ata_sas_port_init - Initialize a SATA device
3460  *      @ap: SATA port to initialize
3461  *
3462  *      LOCKING:
3463  *      PCI/etc. bus probe sem.
3464  *
3465  *      RETURNS:
3466  *      Zero on success, non-zero on error.
3467  */
3468
3469 int ata_sas_port_init(struct ata_port *ap)
3470 {
3471         int rc = ap->ops->port_start(ap);
3472
3473         if (!rc) {
3474                 ap->print_id = ata_print_id++;
3475                 rc = ata_bus_probe(ap);
3476         }
3477
3478         return rc;
3479 }
3480 EXPORT_SYMBOL_GPL(ata_sas_port_init);
3481
3482 /**
3483  *      ata_sas_port_destroy - Destroy a SATA port allocated by ata_sas_port_alloc
3484  *      @ap: SATA port to destroy
3485  *
3486  */
3487
3488 void ata_sas_port_destroy(struct ata_port *ap)
3489 {
3490         if (ap->ops->port_stop)
3491                 ap->ops->port_stop(ap);
3492         kfree(ap);
3493 }
3494 EXPORT_SYMBOL_GPL(ata_sas_port_destroy);
3495
3496 /**
3497  *      ata_sas_slave_configure - Default slave_config routine for libata devices
3498  *      @sdev: SCSI device to configure
3499  *      @ap: ATA port to which SCSI device is attached
3500  *
3501  *      RETURNS:
3502  *      Zero.
3503  */
3504
3505 int ata_sas_slave_configure(struct scsi_device *sdev, struct ata_port *ap)
3506 {
3507         ata_scsi_sdev_config(sdev);
3508         ata_scsi_dev_config(sdev, ap->link.device);
3509         return 0;
3510 }
3511 EXPORT_SYMBOL_GPL(ata_sas_slave_configure);
3512
3513 /**
3514  *      ata_sas_queuecmd - Issue SCSI cdb to libata-managed device
3515  *      @cmd: SCSI command to be sent
3516  *      @done: Completion function, called when command is complete
3517  *      @ap:    ATA port to which the command is being sent
3518  *
3519  *      RETURNS:
3520  *      Return value from __ata_scsi_queuecmd() if @cmd can be queued,
3521  *      0 otherwise.
3522  */
3523
3524 int ata_sas_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *),
3525                      struct ata_port *ap)
3526 {
3527         int rc = 0;
3528
3529         ata_scsi_dump_cdb(ap, cmd);
3530
3531         if (likely(ata_scsi_dev_enabled(ap->link.device)))
3532                 rc = __ata_scsi_queuecmd(cmd, done, ap->link.device);
3533         else {
3534                 cmd->result = (DID_BAD_TARGET << 16);
3535                 done(cmd);
3536         }
3537         return rc;
3538 }
3539 EXPORT_SYMBOL_GPL(ata_sas_queuecmd);