[libata] AHCI: fix newly introduced host-reset bug
[linux-block.git] / drivers / ata / libata-scsi.c
CommitLineData
1da177e4 1/*
af36d7f0
JG
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 *
1da177e4
LT
34 */
35
36#include <linux/kernel.h>
37#include <linux/blkdev.h>
38#include <linux/spinlock.h>
39#include <scsi/scsi.h>
1da177e4 40#include <scsi/scsi_host.h>
beb40487 41#include <scsi/scsi_cmnd.h>
85837ebd 42#include <scsi/scsi_eh.h>
005a5a06 43#include <scsi/scsi_device.h>
a6e6ce8e 44#include <scsi/scsi_tcq.h>
30afc84c 45#include <scsi/scsi_transport.h>
1da177e4 46#include <linux/libata.h>
b095518e 47#include <linux/hdreg.h>
2dcb407e 48#include <linux/uaccess.h>
1da177e4
LT
49
50#include "libata.h"
51
b095518e
JG
52#define SECTOR_SIZE 512
53
ad706991 54typedef unsigned int (*ata_xlat_func_t)(struct ata_queued_cmd *qc);
ab5b3a5b 55
2dcb407e 56static struct ata_device *__ata_scsi_find_dev(struct ata_port *ap,
ab5b3a5b 57 const struct scsi_device *scsidev);
2dcb407e 58static struct ata_device *ata_scsi_find_dev(struct ata_port *ap,
ab5b3a5b 59 const struct scsi_device *scsidev);
83c47bcb
TH
60static int ata_scsi_user_scan(struct Scsi_Host *shost, unsigned int channel,
61 unsigned int id, unsigned int lun);
ab5b3a5b 62
1da177e4 63
00ac37f5
DG
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
24f75686 74static const u8 def_rw_recovery_mpage[RW_RECOVERY_MPAGE_LEN] = {
00ac37f5
DG
75 RW_RECOVERY_MPAGE,
76 RW_RECOVERY_MPAGE_LEN - 2,
24f75686 77 (1 << 7), /* AWRE */
00ac37f5
DG
78 0, /* read retry count */
79 0, 0, 0, 0,
80 0, /* write retry count */
81 0, 0, 0
82};
83
84static 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
93static 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
30afc84c
TH
102/*
103 * libata transport template. libata doesn't do real transport stuff.
104 * It just needs the eh_timed_out hook.
105 */
f3187195 106static struct scsi_transport_template ata_scsi_transport_template = {
9227c33d 107 .eh_strategy_handler = ata_scsi_error,
30afc84c 108 .eh_timed_out = ata_scsi_timed_out,
ccf68c34 109 .user_scan = ata_scsi_user_scan,
30afc84c
TH
110};
111
1da177e4 112
ae006510
DG
113static 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
1da177e4
LT
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 */
139int 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
5924b74c
TH
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 */
161static 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
b095518e
JG
189/**
190 * ata_cmd_ioctl - Handler for HDIO_DRIVE_CMD ioctl
8e8b77dd 191 * @scsidev: Device to which we are issuing command
b095518e
JG
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 */
b095518e
JG
200int ata_cmd_ioctl(struct scsi_device *scsidev, void __user *arg)
201{
202 int rc = 0;
203 u8 scsi_cmd[MAX_COMMAND_SIZE];
bbe1fe7e 204 u8 args[4], *argbuf = NULL, *sensebuf = NULL;
b095518e 205 int argsize = 0;
85837ebd 206 enum dma_data_direction data_dir;
bbe1fe7e 207 int cmd_result;
b095518e 208
c893a3ae 209 if (arg == NULL)
b095518e
JG
210 return -EINVAL;
211
212 if (copy_from_user(args, arg, sizeof(args)))
213 return -EFAULT;
214
bbe1fe7e
ET
215 sensebuf = kzalloc(SCSI_SENSE_BUFFERSIZE, GFP_NOIO);
216 if (!sensebuf)
217 return -ENOMEM;
218
b095518e
JG
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);
54dac83c
JR
224 if (argbuf == NULL) {
225 rc = -ENOMEM;
226 goto error;
227 }
b095518e
JG
228
229 scsi_cmd[1] = (4 << 1); /* PIO Data-in */
230 scsi_cmd[2] = 0x0e; /* no off.line or cc, read from dev,
2dcb407e 231 block count in sector count field */
85837ebd 232 data_dir = DMA_FROM_DEVICE;
b095518e
JG
233 } else {
234 scsi_cmd[1] = (3 << 1); /* Non-data */
bbe1fe7e 235 scsi_cmd[2] = 0x20; /* cc but no off.line or data xfer */
85837ebd 236 data_dir = DMA_NONE;
b095518e
JG
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... */
bbe1fe7e 254 cmd_result = scsi_execute(scsidev, scsi_cmd, data_dir, argbuf, argsize,
2dcb407e 255 sensebuf, (10*HZ), 5, 0);
bbe1fe7e
ET
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,
2dcb407e
JG
266 &sshdr);
267 if (sshdr.sense_key == 0 &&
268 sshdr.asc == 0 && sshdr.ascq == 0)
bbe1fe7e
ET
269 cmd_result &= ~SAM_STAT_CHECK_CONDITION;
270 }
271
272 /* Send userspace a few ATA registers (same as drivers/ide) */
2dcb407e
JG
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) */
bbe1fe7e
ET
278 if (copy_to_user(arg, args, sizeof(args)))
279 rc = -EFAULT;
280 }
281 }
282
283
284 if (cmd_result) {
b095518e
JG
285 rc = -EIO;
286 goto error;
287 }
288
b095518e 289 if ((argbuf)
c893a3ae 290 && copy_to_user(arg + sizeof(args), argbuf, argsize))
b095518e
JG
291 rc = -EFAULT;
292error:
bbe1fe7e 293 kfree(sensebuf);
8f760780 294 kfree(argbuf);
b095518e
JG
295 return rc;
296}
297
298/**
299 * ata_task_ioctl - Handler for HDIO_DRIVE_TASK ioctl
8e8b77dd 300 * @scsidev: Device to which we are issuing command
b095518e
JG
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 */
309int ata_task_ioctl(struct scsi_device *scsidev, void __user *arg)
310{
311 int rc = 0;
312 u8 scsi_cmd[MAX_COMMAND_SIZE];
af068bd1
DM
313 u8 args[7], *sensebuf = NULL;
314 int cmd_result;
b095518e 315
c893a3ae 316 if (arg == NULL)
b095518e
JG
317 return -EINVAL;
318
319 if (copy_from_user(args, arg, sizeof(args)))
320 return -EFAULT;
321
af068bd1
DM
322 sensebuf = kzalloc(SCSI_SENSE_BUFFERSIZE, GFP_NOIO);
323 if (!sensebuf)
324 return -ENOMEM;
325
b095518e
JG
326 memset(scsi_cmd, 0, sizeof(scsi_cmd));
327 scsi_cmd[0] = ATA_16;
328 scsi_cmd[1] = (3 << 1); /* Non-data */
af068bd1 329 scsi_cmd[2] = 0x20; /* cc but no off.line or data xfer */
b095518e
JG
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];
277239f2 335 scsi_cmd[13] = args[6] & 0x4f;
b095518e
JG
336 scsi_cmd[14] = args[0];
337
b095518e 338 /* Good values for timeout and retries? Values below
2e9edbf8 339 from scsi_ioctl_send_command() for default case... */
af068bd1
DM
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);
2dcb407e
JG
353 if (sshdr.sense_key == 0 &&
354 sshdr.asc == 0 && sshdr.ascq == 0)
af068bd1
DM
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) {
b095518e 374 rc = -EIO;
af068bd1
DM
375 goto error;
376 }
b095518e 377
af068bd1
DM
378 error:
379 kfree(sensebuf);
b095518e
JG
380 return rc;
381}
382
1da177e4
LT
383int ata_scsi_ioctl(struct scsi_device *scsidev, int cmd, void __user *arg)
384{
1da177e4
LT
385 int val = -EINVAL, rc = -EINVAL;
386
1da177e4
LT
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
5924b74c
TH
400 case HDIO_GET_IDENTITY:
401 return ata_get_identity(scsidev, arg);
402
b095518e
JG
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
1da177e4
LT
413 default:
414 rc = -ENOTTY;
415 break;
416 }
417
1da177e4
LT
418 return rc;
419}
420
421/**
422 * ata_scsi_qc_new - acquire new ata_queued_cmd reference
1da177e4
LT
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:
cca3974e 436 * spin_lock_irqsave(host lock)
1da177e4
LT
437 *
438 * RETURNS:
439 * Command allocated, or %NULL if none available.
440 */
7102d230
AB
441static struct ata_queued_cmd *ata_scsi_qc_new(struct ata_device *dev,
442 struct scsi_cmnd *cmd,
443 void (*done)(struct scsi_cmnd *))
1da177e4
LT
444{
445 struct ata_queued_cmd *qc;
446
3373efd8 447 qc = ata_qc_new_init(dev);
1da177e4
LT
448 if (qc) {
449 qc->scsicmd = cmd;
450 qc->scsidone = done;
451
7120165c
BH
452 qc->__sg = scsi_sglist(cmd);
453 qc->n_elem = scsi_sg_count(cmd);
1da177e4
LT
454 } else {
455 cmd->result = (DID_OK << 16) | (QUEUE_FULL << 1);
456 done(cmd);
457 }
458
459 return qc;
460}
461
b095518e
JG
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 */
7102d230 474static void ata_dump_status(unsigned id, struct ata_taskfile *tf)
b095518e
JG
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
1da177e4
LT
507/**
508 * ata_to_sense_error - convert ATA error to SCSI error
8e8b77dd 509 * @id: ATA device number
1da177e4 510 * @drv_stat: value contained in ATA status register
b095518e
JG
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
246619da 515 * @verbose: be verbose
1da177e4 516 *
b095518e
JG
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.
1da177e4
LT
520 *
521 * LOCKING:
cca3974e 522 * spin_lock_irqsave(host lock)
1da177e4 523 */
7102d230
AB
524static void ata_to_sense_error(unsigned id, u8 drv_stat, u8 drv_err, u8 *sk,
525 u8 *asc, u8 *ascq, int verbose)
1da177e4 526{
b095518e 527 int i;
ffe75ef6 528
1da177e4 529 /* Based on the 3ware driver translation table */
98ac62de 530 static const unsigned char sense_table[][4] = {
1da177e4
LT
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 };
98ac62de 561 static const unsigned char stat_table[][4] = {
1da177e4
LT
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 };
1da177e4 569
1da177e4
LT
570 /*
571 * Is this an error we can process/parse
572 */
b095518e
JG
573 if (drv_stat & ATA_BUSY) {
574 drv_err = 0; /* Ignore the err bits, they're invalid */
1da177e4 575 }
b095518e
JG
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 */
2e9edbf8 581 if ((sense_table[i][0] & drv_err) ==
b095518e
JG
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 */
246619da
TH
590 if (verbose)
591 printk(KERN_WARNING "ata%u: no sense translation for "
592 "error 0x%02x\n", id, drv_err);
1da177e4 593 }
b095518e
JG
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;
1da177e4 602 }
b095518e
JG
603 }
604 /* No error? Undecoded? */
246619da
TH
605 if (verbose)
606 printk(KERN_WARNING "ata%u: no sense translation for "
607 "status: 0x%02x\n", id, drv_stat);
b095518e 608
2d202024
AC
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;
b095518e
JG
614
615 translate_done:
246619da
TH
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);
b095518e
JG
620 return;
621}
622
623/*
750426aa 624 * ata_gen_passthru_sense - Generate check condition sense block.
b095518e
JG
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:
750426aa 634 * None.
b095518e 635 */
750426aa 636static void ata_gen_passthru_sense(struct ata_queued_cmd *qc)
b095518e
JG
637{
638 struct scsi_cmnd *cmd = qc->scsicmd;
e61e0672 639 struct ata_taskfile *tf = &qc->result_tf;
b095518e
JG
640 unsigned char *sb = cmd->sense_buffer;
641 unsigned char *desc = sb + 8;
246619da 642 int verbose = qc->ap->ops->error_handler == NULL;
b095518e
JG
643
644 memset(sb, 0, SCSI_SENSE_BUFFERSIZE);
645
0e5dec47 646 cmd->result = (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION;
b095518e 647
b095518e
JG
648 /*
649 * Use ata_to_sense_error() to map status register bits
650 * onto sense key, asc & ascq.
651 */
058e55e1
TH
652 if (qc->err_mask ||
653 tf->command & (ATA_BUSY | ATA_DF | ATA_ERR | ATA_DRQ)) {
44877b4e 654 ata_to_sense_error(qc->ap->print_id, tf->command, tf->feature,
246619da 655 &sb[1], &sb[2], &sb[3], verbose);
b095518e 656 sb[1] &= 0x0f;
1da177e4
LT
657 }
658
b095518e
JG
659 /*
660 * Sense data is current and format is descriptor.
661 */
662 sb[0] = 0x72;
1da177e4 663
b095518e
JG
664 desc[0] = 0x09;
665
f38621b3
TH
666 /* set length of additional sense data */
667 sb[7] = 14;
668 desc[1] = 12;
b095518e
JG
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;
1da177e4 692 }
b095518e 693}
1da177e4 694
b095518e 695/**
750426aa 696 * ata_gen_ata_sense - generate a SCSI fixed sense block
b095518e
JG
697 * @qc: Command that we are erroring out
698 *
d25614ba
TH
699 * Generate sense block for a failed ATA command @qc. Descriptor
700 * format is used to accomodate LBA48 block address.
b095518e
JG
701 *
702 * LOCKING:
750426aa 703 * None.
b095518e 704 */
750426aa 705static void ata_gen_ata_sense(struct ata_queued_cmd *qc)
b095518e 706{
d25614ba 707 struct ata_device *dev = qc->dev;
b095518e 708 struct scsi_cmnd *cmd = qc->scsicmd;
e61e0672 709 struct ata_taskfile *tf = &qc->result_tf;
b095518e 710 unsigned char *sb = cmd->sense_buffer;
d25614ba 711 unsigned char *desc = sb + 8;
246619da 712 int verbose = qc->ap->ops->error_handler == NULL;
d25614ba 713 u64 block;
b095518e
JG
714
715 memset(sb, 0, SCSI_SENSE_BUFFERSIZE);
716
0e5dec47 717 cmd->result = (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION;
b095518e 718
d25614ba
TH
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
b095518e
JG
723 * onto sense key, asc & ascq.
724 */
058e55e1
TH
725 if (qc->err_mask ||
726 tf->command & (ATA_BUSY | ATA_DF | ATA_ERR | ATA_DRQ)) {
44877b4e 727 ata_to_sense_error(qc->ap->print_id, tf->command, tf->feature,
d25614ba
TH
728 &sb[1], &sb[2], &sb[3], verbose);
729 sb[1] &= 0x0f;
1da177e4 730 }
1da177e4 731
d25614ba 732 block = ata_tf_read_block(&qc->result_tf, dev);
a7dac447 733
d25614ba
TH
734 /* information sense data descriptor */
735 sb[7] = 12;
736 desc[0] = 0x00;
737 desc[1] = 10;
a7dac447 738
d25614ba
TH
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;
1da177e4
LT
746}
747
a6cce2a7
BK
748static void ata_scsi_sdev_config(struct scsi_device *sdev)
749{
750 sdev->use_10_for_rw = 1;
751 sdev->use_10_for_ms = 1;
31cc23b3
TH
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;
a6cce2a7
BK
759}
760
761static void ata_scsi_dev_config(struct scsi_device *sdev,
762 struct ata_device *dev)
763{
914ed354
TH
764 /* configure max sectors */
765 blk_queue_max_sectors(sdev->request_queue, dev->max_sectors);
a6cce2a7 766
914ed354 767 /* SATA DMA transfers must be multiples of 4 byte, so
a6cce2a7
BK
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) {
165125e1 772 struct request_queue *q = sdev->request_queue;
a6cce2a7
BK
773 blk_queue_max_hw_segments(q, q->max_hw_segments - 1);
774 }
a6e6ce8e
TH
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 }
a6cce2a7
BK
783}
784
1da177e4
LT
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
797int ata_scsi_slave_config(struct scsi_device *sdev)
798{
31534363
TH
799 struct ata_port *ap = ata_shost_to_port(sdev->host);
800 struct ata_device *dev = __ata_scsi_find_dev(ap, sdev);
801
a6cce2a7 802 ata_scsi_sdev_config(sdev);
1da177e4 803
9666f400
TH
804 sdev->manage_start_stop = 1;
805
31534363 806 if (dev)
a6cce2a7 807 ata_scsi_dev_config(sdev, dev);
1da177e4
LT
808
809 return 0; /* scsi layer doesn't check return value, sigh */
810}
811
83c47bcb
TH
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 */
826void 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
ba6a1308 835 spin_lock_irqsave(ap->lock, flags);
83c47bcb
TH
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 }
ba6a1308 843 spin_unlock_irqrestore(ap->lock, flags);
83c47bcb
TH
844}
845
a6e6ce8e
TH
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 */
861int 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;
360f654e 865 unsigned long flags;
a6e6ce8e 866
c3c70c44 867 if (queue_depth < 1 || queue_depth == sdev->queue_depth)
a6e6ce8e
TH
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
c3c70c44 874 /* NCQ enabled? */
360f654e 875 spin_lock_irqsave(ap->lock, flags);
c3c70c44
TH
876 dev->flags &= ~ATA_DFLAG_NCQ_OFF;
877 if (queue_depth == 1 || !ata_ncq_enabled(dev)) {
360f654e 878 dev->flags |= ATA_DFLAG_NCQ_OFF;
c3c70c44
TH
879 queue_depth = 1;
880 }
360f654e
TH
881 spin_unlock_irqrestore(ap->lock, flags);
882
c3c70c44
TH
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);
a6e6ce8e
TH
892 return queue_depth;
893}
894
d9aca22c 895/* XXX: for spindown warning */
da071b42
TH
896static void ata_delayed_done_timerfn(unsigned long arg)
897{
898 struct scsi_cmnd *scmd = (void *)arg;
899
900 scmd->scsi_done(scmd);
901}
902
d9aca22c 903/* XXX: for spindown warning */
da071b42
TH
904static 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
972dcafb
DG
912/**
913 * ata_scsi_start_stop_xlat - Translate SCSI START STOP UNIT command
914 * @qc: Storage for translated ATA taskfile
972dcafb
DG
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:
cca3974e 922 * spin_lock_irqsave(host lock)
972dcafb
DG
923 *
924 * RETURNS:
925 * Zero on success, non-zero on error.
926 */
ad706991 927static unsigned int ata_scsi_start_stop_xlat(struct ata_queued_cmd *qc)
972dcafb 928{
542b1444 929 struct scsi_cmnd *scmd = qc->scsicmd;
972dcafb 930 struct ata_taskfile *tf = &qc->tf;
ad706991 931 const u8 *cdb = scmd->cmnd;
972dcafb 932
2e5704f6
TH
933 if (scmd->cmd_len < 5)
934 goto invalid_fld;
935
972dcafb
DG
936 tf->flags |= ATA_TFLAG_DEVICE | ATA_TFLAG_ISADDR;
937 tf->protocol = ATA_PROT_NODATA;
542b1444 938 if (cdb[1] & 0x1) {
972dcafb
DG
939 ; /* ignore IMMED bit, violates sat-r05 */
940 }
542b1444 941 if (cdb[4] & 0x2)
ae006510 942 goto invalid_fld; /* LOEJ bit set not supported */
542b1444 943 if (((cdb[4] >> 4) & 0xf) != 0)
ae006510 944 goto invalid_fld; /* power conditions not supported */
e31e8531
TH
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
542b1444 952 if (cdb[4] & 0x1) {
972dcafb 953 tf->nsect = 1; /* 1 sector, lba=0 */
9d5b1302
AL
954
955 if (qc->dev->flags & ATA_DFLAG_LBA) {
c44078c0 956 tf->flags |= ATA_TFLAG_LBA;
9d5b1302
AL
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
972dcafb 969 tf->command = ATA_CMD_VERIFY; /* READ VERIFY */
920a4b10
TH
970 } else {
971 /* XXX: This is for backward compatibility, will be
972 * removed. Read Documentation/feature-removal-schedule.txt
973 * for more info.
974 */
d9aca22c 975 if ((qc->dev->flags & ATA_DFLAG_SPUNDOWN) &&
920a4b10
TH
976 (system_state == SYSTEM_HALT ||
977 system_state == SYSTEM_POWER_OFF)) {
2dcb407e 978 static unsigned long warned;
920a4b10 979
da071b42 980 if (!test_and_set_bit(0, &warned)) {
920a4b10
TH
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");
da071b42
TH
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;
920a4b10
TH
993 }
994 scmd->result = SAM_STAT_GOOD;
995 return 1;
996 }
997
78981a7c
RH
998 /* Issue ATA STANDBY IMMEDIATE command */
999 tf->command = ATA_CMD_STANDBYNOW1;
920a4b10 1000 }
78981a7c 1001
972dcafb
DG
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;
ae006510
DG
1010
1011invalid_fld:
542b1444 1012 ata_scsi_set_sense(scmd, ILLEGAL_REQUEST, 0x24, 0x0);
ae006510
DG
1013 /* "Invalid field in cbd" */
1014 return 1;
972dcafb
DG
1015}
1016
1017
1da177e4
LT
1018/**
1019 * ata_scsi_flush_xlat - Translate SCSI SYNCHRONIZE CACHE command
1020 * @qc: Storage for translated ATA taskfile
1da177e4
LT
1021 *
1022 * Sets up an ATA taskfile to issue FLUSH CACHE or
1023 * FLUSH CACHE EXT.
1024 *
1025 * LOCKING:
cca3974e 1026 * spin_lock_irqsave(host lock)
1da177e4
LT
1027 *
1028 * RETURNS:
1029 * Zero on success, non-zero on error.
1030 */
ad706991 1031static unsigned int ata_scsi_flush_xlat(struct ata_queued_cmd *qc)
1da177e4
LT
1032{
1033 struct ata_taskfile *tf = &qc->tf;
1034
1035 tf->flags |= ATA_TFLAG_DEVICE;
1036 tf->protocol = ATA_PROT_NODATA;
1037
6fc49adb 1038 if (qc->dev->flags & ATA_DFLAG_FLUSH_EXT)
1da177e4
LT
1039 tf->command = ATA_CMD_FLUSH_EXT;
1040 else
1041 tf->command = ATA_CMD_FLUSH;
1042
1043 return 0;
1044}
1045
3aef5231
AL
1046/**
1047 * scsi_6_lba_len - Get LBA and transfer length
542b1444 1048 * @cdb: SCSI command to translate
3aef5231
AL
1049 *
1050 * Calculate LBA and transfer length for 6-byte commands.
1051 *
1052 * RETURNS:
1053 * @plba: the LBA
1054 * @plen: the transfer length
1055 */
542b1444 1056static void scsi_6_lba_len(const u8 *cdb, u64 *plba, u32 *plen)
3aef5231
AL
1057{
1058 u64 lba = 0;
6c7b7d2b 1059 u32 len;
3aef5231
AL
1060
1061 VPRINTK("six-byte command\n");
1062
6c7b7d2b 1063 lba |= ((u64)(cdb[1] & 0x1f)) << 16;
542b1444
TH
1064 lba |= ((u64)cdb[2]) << 8;
1065 lba |= ((u64)cdb[3]);
3aef5231 1066
6c7b7d2b 1067 len = cdb[4];
3aef5231
AL
1068
1069 *plba = lba;
1070 *plen = len;
1071}
1072
1073/**
1074 * scsi_10_lba_len - Get LBA and transfer length
542b1444 1075 * @cdb: SCSI command to translate
3aef5231
AL
1076 *
1077 * Calculate LBA and transfer length for 10-byte commands.
1078 *
1079 * RETURNS:
1080 * @plba: the LBA
1081 * @plen: the transfer length
1082 */
542b1444 1083static void scsi_10_lba_len(const u8 *cdb, u64 *plba, u32 *plen)
3aef5231
AL
1084{
1085 u64 lba = 0;
1086 u32 len = 0;
1087
1088 VPRINTK("ten-byte command\n");
1089
542b1444
TH
1090 lba |= ((u64)cdb[2]) << 24;
1091 lba |= ((u64)cdb[3]) << 16;
1092 lba |= ((u64)cdb[4]) << 8;
1093 lba |= ((u64)cdb[5]);
3aef5231 1094
542b1444
TH
1095 len |= ((u32)cdb[7]) << 8;
1096 len |= ((u32)cdb[8]);
3aef5231
AL
1097
1098 *plba = lba;
1099 *plen = len;
1100}
1101
1102/**
1103 * scsi_16_lba_len - Get LBA and transfer length
542b1444 1104 * @cdb: SCSI command to translate
3aef5231
AL
1105 *
1106 * Calculate LBA and transfer length for 16-byte commands.
1107 *
1108 * RETURNS:
1109 * @plba: the LBA
1110 * @plen: the transfer length
1111 */
542b1444 1112static void scsi_16_lba_len(const u8 *cdb, u64 *plba, u32 *plen)
3aef5231
AL
1113{
1114 u64 lba = 0;
1115 u32 len = 0;
1116
1117 VPRINTK("sixteen-byte command\n");
1118
542b1444
TH
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]);
3aef5231 1127
542b1444
TH
1128 len |= ((u32)cdb[10]) << 24;
1129 len |= ((u32)cdb[11]) << 16;
1130 len |= ((u32)cdb[12]) << 8;
1131 len |= ((u32)cdb[13]);
3aef5231
AL
1132
1133 *plba = lba;
1134 *plen = len;
1135}
1136
1da177e4
LT
1137/**
1138 * ata_scsi_verify_xlat - Translate SCSI VERIFY command into an ATA one
1139 * @qc: Storage for translated ATA taskfile
1da177e4
LT
1140 *
1141 * Converts SCSI VERIFY command to an ATA READ VERIFY command.
1142 *
1143 * LOCKING:
cca3974e 1144 * spin_lock_irqsave(host lock)
1da177e4
LT
1145 *
1146 * RETURNS:
1147 * Zero on success, non-zero on error.
1148 */
ad706991 1149static unsigned int ata_scsi_verify_xlat(struct ata_queued_cmd *qc)
1da177e4 1150{
542b1444 1151 struct scsi_cmnd *scmd = qc->scsicmd;
1da177e4 1152 struct ata_taskfile *tf = &qc->tf;
8bf62ece 1153 struct ata_device *dev = qc->dev;
1da177e4 1154 u64 dev_sectors = qc->dev->n_sectors;
ad706991 1155 const u8 *cdb = scmd->cmnd;
3aef5231
AL
1156 u64 block;
1157 u32 n_block;
1da177e4
LT
1158
1159 tf->flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
1160 tf->protocol = ATA_PROT_NODATA;
1da177e4 1161
2e5704f6
TH
1162 if (cdb[0] == VERIFY) {
1163 if (scmd->cmd_len < 10)
1164 goto invalid_fld;
542b1444 1165 scsi_10_lba_len(cdb, &block, &n_block);
2e5704f6
TH
1166 } else if (cdb[0] == VERIFY_16) {
1167 if (scmd->cmd_len < 16)
1168 goto invalid_fld;
542b1444 1169 scsi_16_lba_len(cdb, &block, &n_block);
2e5704f6 1170 } else
ae006510 1171 goto invalid_fld;
1da177e4 1172
8bf62ece 1173 if (!n_block)
ae006510 1174 goto nothing_to_do;
8bf62ece 1175 if (block >= dev_sectors)
ae006510 1176 goto out_of_range;
8bf62ece 1177 if ((block + n_block) > dev_sectors)
ae006510 1178 goto out_of_range;
1da177e4 1179
07506697
AL
1180 if (dev->flags & ATA_DFLAG_LBA) {
1181 tf->flags |= ATA_TFLAG_LBA;
1182
c6a33e24
AL
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;
07506697
AL
1190
1191 /* use LBA48 */
1192 tf->flags |= ATA_TFLAG_LBA48;
8bf62ece 1193 tf->command = ATA_CMD_VERIFY_EXT;
1da177e4 1194
8bf62ece 1195 tf->hob_nsect = (n_block >> 8) & 0xff;
1da177e4 1196
8bf62ece
AL
1197 tf->hob_lbah = (block >> 40) & 0xff;
1198 tf->hob_lbam = (block >> 32) & 0xff;
1199 tf->hob_lbal = (block >> 24) & 0xff;
c6a33e24
AL
1200 } else
1201 /* request too large even for LBA48 */
1202 goto out_of_range;
8bf62ece
AL
1203
1204 tf->nsect = n_block & 0xff;
1da177e4 1205
8bf62ece
AL
1206 tf->lbah = (block >> 16) & 0xff;
1207 tf->lbam = (block >> 8) & 0xff;
1208 tf->lbal = block & 0xff;
1da177e4 1209
8bf62ece
AL
1210 tf->device |= ATA_LBA;
1211 } else {
1212 /* CHS */
1213 u32 sect, head, cyl, track;
1214
c6a33e24
AL
1215 if (!lba_28_ok(block, n_block))
1216 goto out_of_range;
07506697 1217
8bf62ece
AL
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
c187c4b5
AL
1224 DPRINTK("block %u track %u cyl %u head %u sect %u\n",
1225 (u32)block, track, cyl, head, sect);
2e9edbf8
JG
1226
1227 /* Check whether the converted CHS can fit.
1228 Cylinder: 0-65535
8bf62ece
AL
1229 Head: 0-15
1230 Sector: 1-255*/
2e9edbf8 1231 if ((cyl >> 16) || (head >> 4) || (sect >> 8) || (!sect))
ae006510 1232 goto out_of_range;
2e9edbf8 1233
8bf62ece
AL
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 }
1da177e4
LT
1241
1242 return 0;
ae006510
DG
1243
1244invalid_fld:
542b1444 1245 ata_scsi_set_sense(scmd, ILLEGAL_REQUEST, 0x24, 0x0);
ae006510
DG
1246 /* "Invalid field in cbd" */
1247 return 1;
1248
1249out_of_range:
542b1444 1250 ata_scsi_set_sense(scmd, ILLEGAL_REQUEST, 0x21, 0x0);
ae006510
DG
1251 /* "Logical Block Address out of range" */
1252 return 1;
1253
1254nothing_to_do:
542b1444 1255 scmd->result = SAM_STAT_GOOD;
ae006510 1256 return 1;
1da177e4
LT
1257}
1258
1259/**
1260 * ata_scsi_rw_xlat - Translate SCSI r/w command into an ATA one
1261 * @qc: Storage for translated ATA taskfile
1da177e4
LT
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:
cca3974e 1272 * spin_lock_irqsave(host lock)
1da177e4
LT
1273 *
1274 * RETURNS:
1275 * Zero on success, non-zero on error.
1276 */
ad706991 1277static unsigned int ata_scsi_rw_xlat(struct ata_queued_cmd *qc)
1da177e4 1278{
542b1444 1279 struct scsi_cmnd *scmd = qc->scsicmd;
ad706991 1280 const u8 *cdb = scmd->cmnd;
bd056d7e 1281 unsigned int tf_flags = 0;
3aef5231
AL
1282 u64 block;
1283 u32 n_block;
bd056d7e 1284 int rc;
1da177e4 1285
542b1444 1286 if (cdb[0] == WRITE_10 || cdb[0] == WRITE_6 || cdb[0] == WRITE_16)
bd056d7e 1287 tf_flags |= ATA_TFLAG_WRITE;
1da177e4 1288
9a3dccc4 1289 /* Calculate the SCSI LBA, transfer length and FUA. */
542b1444 1290 switch (cdb[0]) {
3aef5231
AL
1291 case READ_10:
1292 case WRITE_10:
2e5704f6
TH
1293 if (unlikely(scmd->cmd_len < 10))
1294 goto invalid_fld;
542b1444
TH
1295 scsi_10_lba_len(cdb, &block, &n_block);
1296 if (unlikely(cdb[1] & (1 << 3)))
bd056d7e 1297 tf_flags |= ATA_TFLAG_FUA;
3aef5231
AL
1298 break;
1299 case READ_6:
1300 case WRITE_6:
2e5704f6
TH
1301 if (unlikely(scmd->cmd_len < 6))
1302 goto invalid_fld;
542b1444 1303 scsi_6_lba_len(cdb, &block, &n_block);
c187c4b5
AL
1304
1305 /* for 6-byte r/w commands, transfer length 0
1306 * means 256 blocks of data, not 0 block.
1307 */
76b2bf9b
JG
1308 if (!n_block)
1309 n_block = 256;
3aef5231
AL
1310 break;
1311 case READ_16:
1312 case WRITE_16:
2e5704f6
TH
1313 if (unlikely(scmd->cmd_len < 16))
1314 goto invalid_fld;
542b1444
TH
1315 scsi_16_lba_len(cdb, &block, &n_block);
1316 if (unlikely(cdb[1] & (1 << 3)))
bd056d7e 1317 tf_flags |= ATA_TFLAG_FUA;
3aef5231
AL
1318 break;
1319 default:
8bf62ece 1320 DPRINTK("no-byte command\n");
ae006510 1321 goto invalid_fld;
1da177e4
LT
1322 }
1323
8bf62ece
AL
1324 /* Check and compose ATA command */
1325 if (!n_block)
c187c4b5
AL
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.
f51750d5
AC
1330 *
1331 * WARNING: one or two older ATA drives treat 0 as 0...
c187c4b5 1332 */
ae006510 1333 goto nothing_to_do;
1da177e4 1334
bd056d7e 1335 qc->flags |= ATA_QCFLAG_IO;
726f0785 1336 qc->nbytes = n_block * ATA_SECT_SIZE;
1da177e4 1337
bd056d7e
TH
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;
ae006510 1342
bd056d7e
TH
1343 if (rc == -ERANGE)
1344 goto out_of_range;
1345 /* treat all other errors as -EINVAL, fall through */
ae006510 1346invalid_fld:
542b1444 1347 ata_scsi_set_sense(scmd, ILLEGAL_REQUEST, 0x24, 0x0);
ae006510
DG
1348 /* "Invalid field in cbd" */
1349 return 1;
1350
1351out_of_range:
542b1444 1352 ata_scsi_set_sense(scmd, ILLEGAL_REQUEST, 0x21, 0x0);
ae006510
DG
1353 /* "Logical Block Address out of range" */
1354 return 1;
1355
1356nothing_to_do:
542b1444 1357 scmd->result = SAM_STAT_GOOD;
ae006510 1358 return 1;
1da177e4
LT
1359}
1360
77853bf2 1361static void ata_scsi_qc_complete(struct ata_queued_cmd *qc)
1da177e4 1362{
c31f571d 1363 struct ata_port *ap = qc->ap;
1da177e4 1364 struct scsi_cmnd *cmd = qc->scsicmd;
a7dac447 1365 u8 *cdb = cmd->cmnd;
2dcb407e 1366 int need_sense = (qc->err_mask != 0);
b095518e
JG
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 */
a7dac447 1375 if (((cdb[0] == ATA_16) || (cdb[0] == ATA_12)) &&
2dcb407e 1376 ((cdb[2] & 0x20) || need_sense)) {
750426aa 1377 ata_gen_passthru_sense(qc);
b095518e
JG
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 */
750426aa 1388 ata_gen_ata_sense(qc);
b095518e
JG
1389 }
1390 }
1da177e4 1391
d9aca22c 1392 /* XXX: track spindown state for spindown skipping and warning */
13b8d09f
TH
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
c31f571d 1400 if (need_sense && !ap->ops->error_handler)
44877b4e 1401 ata_dump_status(ap->print_id, &qc->result_tf);
1da177e4
LT
1402
1403 qc->scsidone(cmd);
1404
77853bf2 1405 ata_qc_free(qc);
1da177e4
LT
1406}
1407
1408/**
1409 * ata_scsi_translate - Translate then issue SCSI command to ATA device
1da177e4
LT
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 *
ae006510
DG
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 *
1da177e4 1428 * LOCKING:
cca3974e 1429 * spin_lock_irqsave(host lock)
2115ea94
TH
1430 *
1431 * RETURNS:
1432 * 0 on success, SCSI_ML_QUEUE_DEVICE_BUSY if the command
1433 * needs to be deferred.
1da177e4 1434 */
2115ea94
TH
1435static 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)
1da177e4 1438{
31cc23b3 1439 struct ata_port *ap = dev->link->ap;
1da177e4 1440 struct ata_queued_cmd *qc;
31cc23b3 1441 int rc;
1da177e4
LT
1442
1443 VPRINTK("ENTER\n");
1444
3373efd8 1445 qc = ata_scsi_qc_new(dev, cmd, done);
1da177e4 1446 if (!qc)
ae006510 1447 goto err_mem;
1da177e4
LT
1448
1449 /* data is present; dma-map it */
be7db055 1450 if (cmd->sc_data_direction == DMA_FROM_DEVICE ||
1451 cmd->sc_data_direction == DMA_TO_DEVICE) {
7120165c 1452 if (unlikely(scsi_bufflen(cmd) < 1)) {
f15a1daf
TH
1453 ata_dev_printk(dev, KERN_WARNING,
1454 "WARNING: zero len r/w req\n");
ae006510 1455 goto err_did;
1da177e4
LT
1456 }
1457
7120165c 1458 ata_sg_init(qc, scsi_sglist(cmd), scsi_sg_count(cmd));
1da177e4
LT
1459
1460 qc->dma_dir = cmd->sc_data_direction;
1461 }
1462
1463 qc->complete_fn = ata_scsi_qc_complete;
1464
ad706991 1465 if (xlat_func(qc))
ae006510 1466 goto early_finish;
1da177e4 1467
31cc23b3
TH
1468 if (ap->ops->qc_defer) {
1469 if ((rc = ap->ops->qc_defer(qc)))
1470 goto defer;
1471 }
1472
1da177e4 1473 /* select device, send command to hardware */
8e0e694a 1474 ata_qc_issue(qc);
1da177e4
LT
1475
1476 VPRINTK("EXIT\n");
2115ea94 1477 return 0;
1da177e4 1478
ae006510 1479early_finish:
2dcb407e 1480 ata_qc_free(qc);
da071b42 1481 qc->scsidone(cmd);
ae006510 1482 DPRINTK("EXIT - early finish (good or error)\n");
2115ea94 1483 return 0;
ae006510
DG
1484
1485err_did:
1da177e4 1486 ata_qc_free(qc);
ae006510 1487 cmd->result = (DID_ERROR << 16);
da071b42 1488 qc->scsidone(cmd);
253b92ec 1489err_mem:
ae006510 1490 DPRINTK("EXIT - internal\n");
2115ea94 1491 return 0;
3dc1d881
TH
1492
1493defer:
31cc23b3 1494 ata_qc_free(qc);
3dc1d881 1495 DPRINTK("EXIT - defer\n");
31cc23b3
TH
1496 if (rc == ATA_DEFER_LINK)
1497 return SCSI_MLQUEUE_DEVICE_BUSY;
1498 else
1499 return SCSI_MLQUEUE_HOST_BUSY;
1da177e4
LT
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:
cca3974e 1510 * spin_lock_irqsave(host lock)
1da177e4
LT
1511 *
1512 * RETURNS:
1513 * Length of response buffer.
1514 */
1515
1516static unsigned int ata_scsi_rbuf_get(struct scsi_cmnd *cmd, u8 **buf_out)
1517{
1518 u8 *buf;
1519 unsigned int buflen;
1520
7120165c 1521 struct scatterlist *sg = scsi_sglist(cmd);
1da177e4 1522
e10b8c3f 1523 if (sg) {
45711f1a 1524 buf = kmap_atomic(sg_page(sg), KM_IRQ0) + sg->offset;
1da177e4
LT
1525 buflen = sg->length;
1526 } else {
e10b8c3f
BH
1527 buf = NULL;
1528 buflen = 0;
1da177e4
LT
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:
cca3974e 1543 * spin_lock_irqsave(host lock)
1da177e4
LT
1544 */
1545
1546static inline void ata_scsi_rbuf_put(struct scsi_cmnd *cmd, u8 *buf)
1547{
7120165c 1548 struct scatterlist *sg = scsi_sglist(cmd);
e10b8c3f 1549 if (sg)
da02d2a1 1550 kunmap_atomic(buf - sg->offset, KM_IRQ0);
1da177e4
LT
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
ae006510
DG
1562 * completed successfully (0), or not (in which case cmd->result
1563 * and sense buffer are assumed to be set).
1da177e4
LT
1564 *
1565 * LOCKING:
cca3974e 1566 * spin_lock_irqsave(host lock)
1da177e4
LT
1567 */
1568
1569void ata_scsi_rbuf_fill(struct ata_scsi_args *args,
2dcb407e
JG
1570 unsigned int (*actor) (struct ata_scsi_args *args,
1571 u8 *rbuf, unsigned int buflen))
1da177e4
LT
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
ae006510 1582 if (rc == 0)
1da177e4 1583 cmd->result = SAM_STAT_GOOD;
ae006510 1584 args->done(cmd);
1da177e4
LT
1585}
1586
6a36261e
TH
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
1da177e4
LT
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
b142eb65 1610 * with non-VPD INQUIRY command output.
1da177e4
LT
1611 *
1612 * LOCKING:
cca3974e 1613 * spin_lock_irqsave(host lock)
1da177e4
LT
1614 */
1615
1616unsigned 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);
a0cf733b
TH
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);
1da177e4
LT
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/**
b142eb65 1661 * ata_scsiop_inq_00 - Simulate INQUIRY VPD page 0, list of pages
1da177e4
LT
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 *
b142eb65 1666 * Returns list of inquiry VPD pages available.
1da177e4
LT
1667 *
1668 * LOCKING:
cca3974e 1669 * spin_lock_irqsave(host lock)
1da177e4
LT
1670 */
1671
1672unsigned 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 };
b142eb65 1680 rbuf[3] = sizeof(pages); /* number of supported VPD pages */
1da177e4
LT
1681
1682 if (buflen > 6)
1683 memcpy(rbuf + 4, pages, sizeof(pages));
1684
1685 return 0;
1686}
1687
1688/**
b142eb65 1689 * ata_scsiop_inq_80 - Simulate INQUIRY VPD page 80, device serial number
1da177e4
LT
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:
cca3974e 1697 * spin_lock_irqsave(host lock)
1da177e4
LT
1698 */
1699
1700unsigned 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,
a0cf733b 1707 ATA_ID_SERNO_LEN, /* page len */
1da177e4
LT
1708 };
1709 memcpy(rbuf, hdr, sizeof(hdr));
1710
a0cf733b 1711 if (buflen > (ATA_ID_SERNO_LEN + 4 - 1))
6a62a04d 1712 ata_id_string(args->id, (unsigned char *) &rbuf[4],
a0cf733b 1713 ATA_ID_SERNO, ATA_ID_SERNO_LEN);
1da177e4
LT
1714
1715 return 0;
1716}
1717
1da177e4 1718/**
b142eb65 1719 * ata_scsiop_inq_83 - Simulate INQUIRY VPD page 83, device identity
1da177e4
LT
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 *
b142eb65
JG
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.
1da177e4
LT
1728 *
1729 * LOCKING:
cca3974e 1730 * spin_lock_irqsave(host lock)
1da177e4
LT
1731 */
1732
1733unsigned int ata_scsiop_inq_83(struct ata_scsi_args *args, u8 *rbuf,
1734 unsigned int buflen)
1735{
b142eb65
JG
1736 int num;
1737 const int sat_model_serial_desc_len = 68;
1da177e4 1738
b142eb65
JG
1739 rbuf[1] = 0x83; /* this page code */
1740 num = 4;
1741
a0cf733b 1742 if (buflen > (ATA_ID_SERNO_LEN + num + 3)) {
b142eb65 1743 /* piv=0, assoc=lu, code_set=ACSII, designator=vendor */
2e9edbf8 1744 rbuf[num + 0] = 2;
a0cf733b 1745 rbuf[num + 3] = ATA_ID_SERNO_LEN;
b142eb65
JG
1746 num += 4;
1747 ata_id_string(args->id, (unsigned char *) rbuf + num,
a0cf733b
TH
1748 ATA_ID_SERNO, ATA_ID_SERNO_LEN);
1749 num += ATA_ID_SERNO_LEN;
1da177e4 1750 }
b142eb65
JG
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 */
2e9edbf8
JG
1754 rbuf[num + 0] = 2;
1755 rbuf[num + 1] = 1;
b142eb65
JG
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,
a0cf733b
TH
1761 ATA_ID_PROD, ATA_ID_PROD_LEN);
1762 num += ATA_ID_PROD_LEN;
b142eb65 1763 ata_id_string(args->id, (unsigned char *) rbuf + num,
a0cf733b
TH
1764 ATA_ID_SERNO, ATA_ID_SERNO_LEN);
1765 num += ATA_ID_SERNO_LEN;
b142eb65
JG
1766 }
1767 rbuf[3] = num - 4; /* page len (assume less than 256 bytes) */
1da177e4
LT
1768 return 0;
1769}
1770
ad355b46
JG
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
1783unsigned 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
c78968bb
JG
1800 memcpy(&pbuf[8], "linux ", 8);
1801 memcpy(&pbuf[16], "libata ", 16);
1802 memcpy(&pbuf[32], DRV_VERSION, 4);
ad355b46
JG
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
1da177e4 1827/**
0cba632b 1828 * ata_scsiop_noop - Command handler that simply returns success.
1da177e4
LT
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:
cca3974e 1837 * spin_lock_irqsave(host lock)
1da177e4
LT
1838 */
1839
1840unsigned 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
1860static 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
1889static unsigned int ata_msense_caching(u16 *id, u8 **ptr_io,
1890 const u8 *last)
1891{
00ac37f5 1892 u8 page[CACHE_MPAGE_LEN];
1da177e4 1893
00ac37f5 1894 memcpy(page, def_cache_mpage, sizeof(page));
1da177e4
LT
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
1916static unsigned int ata_msense_ctl_mode(u8 **ptr_io, const u8 *last)
1917{
00ac37f5
DG
1918 ata_msense_push(ptr_io, last, def_control_mpage,
1919 sizeof(def_control_mpage));
1920 return sizeof(def_control_mpage);
1da177e4
LT
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
1935static unsigned int ata_msense_rw_recovery(u8 **ptr_io, const u8 *last)
1936{
1da177e4 1937
00ac37f5
DG
1938 ata_msense_push(ptr_io, last, def_rw_recovery_mpage,
1939 sizeof(def_rw_recovery_mpage));
1940 return sizeof(def_rw_recovery_mpage);
1da177e4
LT
1941}
1942
48bdc8ec
JA
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 */
1947static int ata_dev_supports_fua(u16 *id)
1948{
a0cf733b 1949 unsigned char model[ATA_ID_PROD_LEN + 1], fw[ATA_ID_FW_REV_LEN + 1];
48bdc8ec 1950
c3c013a2
JG
1951 if (!libata_fua)
1952 return 0;
48bdc8ec
JA
1953 if (!ata_id_has_fua(id))
1954 return 0;
1955
a0cf733b
TH
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));
48bdc8ec 1958
2e02671d 1959 if (strcmp(model, "Maxtor"))
48bdc8ec 1960 return 1;
2e02671d 1961 if (strcmp(fw, "BANC1G10"))
48bdc8ec
JA
1962 return 1;
1963
1964 return 0; /* blacklisted */
1965}
1966
1da177e4
LT
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 *
00ac37f5
DG
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.
1da177e4
LT
1976 *
1977 * LOCKING:
cca3974e 1978 * spin_lock_irqsave(host lock)
1da177e4
LT
1979 */
1980
1981unsigned int ata_scsiop_mode_sense(struct ata_scsi_args *args, u8 *rbuf,
1982 unsigned int buflen)
1983{
9a3dccc4 1984 struct ata_device *dev = args->dev;
1da177e4 1985 u8 *scsicmd = args->cmd->cmnd, *p, *last;
00ac37f5
DG
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;
9a3dccc4 1993 u8 dpofua;
1da177e4
LT
1994
1995 VPRINTK("ENTER\n");
1996
1997 six_byte = (scsicmd[0] == MODE_SENSE);
00ac37f5
DG
1998 ebd = !(scsicmd[1] & 0x8); /* dbd bit inverted == edb */
1999 /*
2000 * LLBA bit in msense(10) ignored (compliant)
1da177e4 2001 */
00ac37f5 2002
1da177e4 2003 page_control = scsicmd[2] >> 6;
ae006510
DG
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 }
1da177e4 2014
00ac37f5
DG
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;
1da177e4
LT
2023
2024 p = rbuf + output_len;
00ac37f5 2025 last = rbuf + minlen - 1;
1da177e4 2026
00ac37f5
DG
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:
1da177e4
LT
2038 output_len += ata_msense_rw_recovery(&p, last);
2039 break;
2040
00ac37f5 2041 case CACHE_MPAGE:
1da177e4
LT
2042 output_len += ata_msense_caching(args->id, &p, last);
2043 break;
2044
00ac37f5 2045 case CONTROL_MPAGE: {
1da177e4
LT
2046 output_len += ata_msense_ctl_mode(&p, last);
2047 break;
2048 }
2049
00ac37f5 2050 case ALL_MPAGES:
1da177e4
LT
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 */
ae006510 2057 goto invalid_fld;
1da177e4
LT
2058 }
2059
00ac37f5
DG
2060 if (minlen < 1)
2061 return 0;
9a3dccc4
TH
2062
2063 dpofua = 0;
f79d409f 2064 if (ata_dev_supports_fua(args->id) && (dev->flags & ATA_DFLAG_LBA48) &&
9a3dccc4
TH
2065 (!(dev->flags & ATA_DFLAG_PIO) || dev->multi_count))
2066 dpofua = 1 << 4;
2067
1da177e4
LT
2068 if (six_byte) {
2069 output_len--;
2070 rbuf[0] = output_len;
9a3dccc4
TH
2071 if (minlen > 2)
2072 rbuf[2] |= dpofua;
00ac37f5
DG
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 }
1da177e4
LT
2080 } else {
2081 output_len -= 2;
2082 rbuf[0] = output_len >> 8;
00ac37f5
DG
2083 if (minlen > 1)
2084 rbuf[1] = output_len;
9a3dccc4
TH
2085 if (minlen > 3)
2086 rbuf[3] |= dpofua;
00ac37f5
DG
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 }
1da177e4 2094 }
1da177e4 2095 return 0;
ae006510
DG
2096
2097invalid_fld:
2098 ata_scsi_set_sense(args->cmd, ILLEGAL_REQUEST, 0x24, 0x0);
2099 /* "Invalid field in cbd" */
2100 return 1;
2101
2102saving_not_supp:
2103 ata_scsi_set_sense(args->cmd, ILLEGAL_REQUEST, 0x39, 0x0);
2104 /* "Saving parameters not supported" */
2105 return 1;
1da177e4
LT
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:
6a36261e 2117 * None.
1da177e4 2118 */
1da177e4 2119unsigned int ata_scsiop_read_cap(struct ata_scsi_args *args, u8 *rbuf,
2dcb407e 2120 unsigned int buflen)
1da177e4 2121{
6a36261e 2122 u64 last_lba = args->dev->n_sectors - 1; /* LBA of the last block */
1da177e4
LT
2123
2124 VPRINTK("ENTER\n");
2125
1da177e4 2126 if (args->cmd->cmnd[0] == READ_CAPACITY) {
6a36261e
TH
2127 if (last_lba >= 0xffffffffULL)
2128 last_lba = 0xffffffff;
0c144d0d 2129
1da177e4 2130 /* sector count, 32-bit */
6a36261e
TH
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);
1da177e4
LT
2135
2136 /* sector size */
6a36261e
TH
2137 ATA_SCSI_RBUF_SET(6, ATA_SECT_SIZE >> 8);
2138 ATA_SCSI_RBUF_SET(7, ATA_SECT_SIZE);
1da177e4
LT
2139 } else {
2140 /* sector count, 64-bit */
6a36261e
TH
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);
1da177e4
LT
2149
2150 /* sector size */
6a36261e
TH
2151 ATA_SCSI_RBUF_SET(10, ATA_SECT_SIZE >> 8);
2152 ATA_SCSI_RBUF_SET(11, ATA_SECT_SIZE);
1da177e4
LT
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:
cca3974e 2167 * spin_lock_irqsave(host lock)
1da177e4
LT
2168 */
2169
2170unsigned 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
845c5834
DG
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
2196void 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
1da177e4
LT
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:
cca3974e 2219 * spin_lock_irqsave(host lock)
1da177e4
LT
2220 */
2221
2222void ata_scsi_badcmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *), u8 asc, u8 ascq)
2223{
2224 DPRINTK("ENTER\n");
ae006510 2225 ata_scsi_set_sense(cmd, ILLEGAL_REQUEST, asc, ascq);
1da177e4
LT
2226
2227 done(cmd);
2228}
2229
77853bf2 2230static void atapi_sense_complete(struct ata_queued_cmd *qc)
a939c963 2231{
74e6c8c3 2232 if (qc->err_mask && ((qc->err_mask & AC_ERR_DEV) == 0)) {
c6e6e666
JG
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 */
750426aa 2238 ata_gen_passthru_sense(qc);
74e6c8c3 2239 }
a939c963 2240
c6e6e666 2241 qc->scsidone(qc->scsicmd);
77853bf2 2242 ata_qc_free(qc);
c6e6e666 2243}
a939c963 2244
c6e6e666
JG
2245/* is it pointless to prefer PIO for "safety reasons"? */
2246static inline int ata_pio_use_silly(struct ata_port *ap)
2247{
2248 return (ap->flags & ATA_FLAG_PIO_DMA);
2249}
2250
2251static 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");
a939c963
JG
2257
2258 /* FIXME: is this needed? */
2259 memset(cmd->sense_buffer, 0, sizeof(cmd->sense_buffer));
2260
c6e6e666
JG
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
a939c963
JG
2269 ata_sg_init_one(qc, cmd->sense_buffer, sizeof(cmd->sense_buffer));
2270 qc->dma_dir = DMA_FROM_DEVICE;
2271
6e7846e9 2272 memset(&qc->cdb, 0, qc->dev->cdb_len);
a939c963
JG
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
c6e6e666
JG
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;
2db78dd3
AC
2284 qc->tf.lbam = SCSI_SENSE_BUFFERSIZE;
2285 qc->tf.lbah = 0;
c6e6e666 2286 }
a939c963
JG
2287 qc->nbytes = SCSI_SENSE_BUFFERSIZE;
2288
c6e6e666 2289 qc->complete_fn = atapi_sense_complete;
a939c963 2290
8e0e694a 2291 ata_qc_issue(qc);
a939c963
JG
2292
2293 DPRINTK("EXIT\n");
2294}
2295
77853bf2 2296static void atapi_qc_complete(struct ata_queued_cmd *qc)
1da177e4
LT
2297{
2298 struct scsi_cmnd *cmd = qc->scsicmd;
a22e2eb0 2299 unsigned int err_mask = qc->err_mask;
1da177e4 2300
a7dac447 2301 VPRINTK("ENTER, err_mask 0x%X\n", err_mask);
e12669e7 2302
246619da
TH
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 */
750426aa 2313 ata_gen_passthru_sense(qc);
246619da
TH
2314 }
2315
22aac089
TH
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
246619da
TH
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 */
a7dac447 2336 if (unlikely(err_mask & AC_ERR_DEV)) {
1da177e4 2337 cmd->result = SAM_STAT_CHECK_CONDITION;
c6e6e666 2338 atapi_request_sense(qc);
77853bf2 2339 return;
74e6c8c3 2340 } else if (unlikely(err_mask)) {
a7dac447
JG
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 */
750426aa 2346 ata_gen_passthru_sense(qc);
74e6c8c3 2347 } else {
1da177e4
LT
2348 u8 *scsicmd = cmd->cmnd;
2349
fd71da46 2350 if ((scsicmd[0] == INQUIRY) && ((scsicmd[1] & 0x03) == 0)) {
1da177e4
LT
2351 u8 *buf = NULL;
2352 unsigned int buflen;
2353
2354 buflen = ata_scsi_rbuf_get(cmd, &buf);
a15dbeb4
JG
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.
a15dbeb4
JG
2363 */
2364 if (buf[2] == 0) {
2365 buf[2] = 0x5;
2366 buf[3] = 0x32;
2367 }
2368
1da177e4
LT
2369 ata_scsi_rbuf_put(cmd, buf);
2370 }
a15dbeb4 2371
1da177e4
LT
2372 cmd->result = SAM_STAT_GOOD;
2373 }
2374
2375 qc->scsidone(cmd);
77853bf2 2376 ata_qc_free(qc);
1da177e4
LT
2377}
2378/**
2379 * atapi_xlat - Initialize PACKET taskfile
2380 * @qc: command structure to be initialized
1da177e4
LT
2381 *
2382 * LOCKING:
cca3974e 2383 * spin_lock_irqsave(host lock)
1da177e4
LT
2384 *
2385 * RETURNS:
2386 * Zero on success, non-zero on failure.
2387 */
ad706991 2388static unsigned int atapi_xlat(struct ata_queued_cmd *qc)
1da177e4 2389{
542b1444 2390 struct scsi_cmnd *scmd = qc->scsicmd;
1da177e4
LT
2391 struct ata_device *dev = qc->dev;
2392 int using_pio = (dev->flags & ATA_DFLAG_PIO);
542b1444 2393 int nodata = (scmd->sc_data_direction == DMA_NONE);
2db78dd3 2394 unsigned int nbytes;
1da177e4 2395
2e5704f6
TH
2396 memset(qc->cdb, 0, dev->cdb_len);
2397 memcpy(qc->cdb, scmd->cmnd, scmd->cmd_len);
1da177e4
LT
2398
2399 qc->complete_fn = atapi_qc_complete;
2400
2401 qc->tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
542b1444 2402 if (scmd->sc_data_direction == DMA_TO_DEVICE) {
1da177e4
LT
2403 qc->tf.flags |= ATA_TFLAG_WRITE;
2404 DPRINTK("direction: write\n");
2405 }
2406
2407 qc->tf.command = ATA_CMD_PACKET;
7120165c 2408 qc->nbytes = scsi_bufflen(scmd);
e00f1ff3
TH
2409
2410 /* check whether ATAPI DMA is safe */
2411 if (!using_pio && ata_check_atapi_dma(qc))
2412 using_pio = 1;
1da177e4 2413
2db78dd3
AC
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
1da177e4 2422 if (using_pio || nodata) {
e00f1ff3 2423 /* no data, or PIO data xfer */
1da177e4
LT
2424 if (nodata)
2425 qc->tf.protocol = ATA_PROT_ATAPI_NODATA;
2426 else
2427 qc->tf.protocol = ATA_PROT_ATAPI;
e00f1ff3
TH
2428 } else {
2429 /* DMA data xfer */
1da177e4
LT
2430 qc->tf.protocol = ATA_PROT_ATAPI_DMA;
2431 qc->tf.feature |= ATAPI_PKT_DMA;
2432
542b1444 2433 if (atapi_dmadir && (scmd->sc_data_direction != DMA_TO_DEVICE))
95de719a 2434 /* some SATA bridges need us to indicate data xfer direction */
1da177e4 2435 qc->tf.feature |= ATAPI_DMADIR;
1da177e4
LT
2436 }
2437
2db78dd3
AC
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 */
1da177e4
LT
2441 return 0;
2442}
2443
2dcb407e 2444static struct ata_device *ata_find_dev(struct ata_port *ap, int devno)
ab5b3a5b 2445{
41bda9c9
TH
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
ab5b3a5b
TH
2454 return NULL;
2455}
2456
2dcb407e
JG
2457static struct ata_device *__ata_scsi_find_dev(struct ata_port *ap,
2458 const struct scsi_device *scsidev)
ab5b3a5b 2459{
41bda9c9
TH
2460 int devno;
2461
ab5b3a5b 2462 /* skip commands not addressed to targets we simulate */
41bda9c9
TH
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 }
ab5b3a5b 2472
41bda9c9 2473 return ata_find_dev(ap, devno);
ab5b3a5b
TH
2474}
2475
99ba9e09
BK
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:
cca3974e 2483 * spin_lock_irqsave(host lock)
99ba9e09
BK
2484 *
2485 * RETURNS:
2486 * 0 if commands are not allowed / 1 if commands are allowed
2487 */
2488
2489static int ata_scsi_dev_enabled(struct ata_device *dev)
2490{
2491 if (unlikely(!ata_dev_enabled(dev)))
2492 return 0;
2493
9af5c9c9 2494 if (!atapi_enabled || (dev->link->ap->flags & ATA_FLAG_NO_ATAPI)) {
99ba9e09
BK
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
1da177e4
LT
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:
cca3974e 2517 * spin_lock_irqsave(host lock)
1da177e4
LT
2518 *
2519 * RETURNS:
2520 * Associated ATA device, or %NULL if not found.
2521 */
1da177e4 2522static struct ata_device *
057ace5e 2523ata_scsi_find_dev(struct ata_port *ap, const struct scsi_device *scsidev)
1da177e4 2524{
ab5b3a5b 2525 struct ata_device *dev = __ata_scsi_find_dev(ap, scsidev);
1da177e4 2526
99ba9e09 2527 if (unlikely(!dev || !ata_scsi_dev_enabled(dev)))
1da177e4
LT
2528 return NULL;
2529
1da177e4
LT
2530 return dev;
2531}
2532
b095518e
JG
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 */
2540static u8
2541ata_scsi_map_proto(u8 byte1)
2542{
2543 switch((byte1 & 0x1e) >> 1) {
2dcb407e
JG
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;
b095518e
JG
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
b095518e
JG
2573 *
2574 * Handles either 12 or 16-byte versions of the CDB.
2575 *
2576 * RETURNS:
2577 * Zero on success, non-zero on failure.
2578 */
ad706991 2579static unsigned int ata_scsi_pass_thru(struct ata_queued_cmd *qc)
b095518e
JG
2580{
2581 struct ata_taskfile *tf = &(qc->tf);
542b1444 2582 struct scsi_cmnd *scmd = qc->scsicmd;
f79d409f 2583 struct ata_device *dev = qc->dev;
ad706991 2584 const u8 *cdb = scmd->cmnd;
b095518e 2585
542b1444 2586 if ((tf->protocol = ata_scsi_map_proto(cdb[1])) == ATA_PROT_UNKNOWN)
9a405257 2587 goto invalid_fld;
8190bdb9 2588
f79d409f
AC
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;
b095518e
JG
2592
2593 /*
2594 * 12 and 16 byte CDBs use different offsets to
2595 * provide the various register values.
2596 */
542b1444 2597 if (cdb[0] == ATA_16) {
b095518e
JG
2598 /*
2599 * 16-byte CDB - may contain extended commands.
2600 *
2601 * If that is the case, copy the upper byte register values.
2602 */
542b1444
TH
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];
b095518e
JG
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 */
542b1444
TH
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];
b095518e
JG
2623 } else {
2624 /*
2625 * 12-byte CDB - incapable of extended commands.
2626 */
2627 tf->flags &= ~ATA_TFLAG_LBA48;
2628
542b1444
TH
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];
b095518e 2636 }
fa4453c4
AL
2637
2638 /* enforce correct master/slave bit */
2639 tf->device = dev->devno ?
2640 tf->device | ATA_DEV1 : tf->device & ~ATA_DEV1;
b095518e 2641
1dce589c
AL
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);
d26fc955 2656 }
1dce589c 2657
5a5dbd18
ML
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;
7120165c 2667 qc->sect_size = scsi_bufflen(scmd);
5a5dbd18
ML
2668 }
2669
b095518e
JG
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))
9a405257 2679 goto invalid_fld;
b095518e
JG
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
542b1444 2688 if (scmd->sc_data_direction == DMA_TO_DEVICE)
b095518e
JG
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 */
7120165c 2697 qc->nbytes = scsi_bufflen(scmd);
b095518e 2698
e61e0672
TH
2699 /* request result TF */
2700 qc->flags |= ATA_QCFLAG_RESULT_TF;
2701
b095518e 2702 return 0;
9a405257
TH
2703
2704 invalid_fld:
542b1444 2705 ata_scsi_set_sense(scmd, ILLEGAL_REQUEST, 0x24, 0x00);
9a405257
TH
2706 /* "Invalid field in cdb" */
2707 return 1;
b095518e
JG
2708}
2709
1da177e4
LT
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
2722static 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;
b095518e
JG
2742
2743 case ATA_12:
2744 case ATA_16:
2745 return ata_scsi_pass_thru;
da61396d 2746
972dcafb
DG
2747 case START_STOP:
2748 return ata_scsi_start_stop_xlat;
1da177e4
LT
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
2762static 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",
44877b4e 2770 ap->print_id,
1da177e4
LT
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
542b1444 2778static inline int __ata_scsi_queuecmd(struct scsi_cmnd *scmd,
2115ea94
TH
2779 void (*done)(struct scsi_cmnd *),
2780 struct ata_device *dev)
eb3f0f9c 2781{
baf4fdfa
ML
2782 u8 scsi_op = scmd->cmnd[0];
2783 ata_xlat_func_t xlat_func;
2115ea94
TH
2784 int rc = 0;
2785
eb3f0f9c 2786 if (dev->class == ATA_DEV_ATA) {
baf4fdfa
ML
2787 if (unlikely(!scmd->cmd_len || scmd->cmd_len > dev->cdb_len))
2788 goto bad_cdb_len;
eb3f0f9c 2789
baf4fdfa
ML
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);
2115ea94
TH
2815
2816 return rc;
baf4fdfa
ML
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;
eb3f0f9c
BK
2824}
2825
1da177e4
LT
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:
cca3974e 2839 * Releases scsi-layer-held lock, and obtains host lock.
1da177e4
LT
2840 *
2841 * RETURNS:
2115ea94
TH
2842 * Return value from __ata_scsi_queuecmd() if @cmd can be queued,
2843 * 0 otherwise.
1da177e4 2844 */
1da177e4
LT
2845int 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;
005a5a06 2850 struct Scsi_Host *shost = scsidev->host;
2115ea94 2851 int rc = 0;
1da177e4 2852
35bb94b1 2853 ap = ata_shost_to_port(shost);
005a5a06
JG
2854
2855 spin_unlock(shost->host_lock);
ba6a1308 2856 spin_lock(ap->lock);
1da177e4
LT
2857
2858 ata_scsi_dump_cdb(ap, cmd);
2859
2860 dev = ata_scsi_find_dev(ap, scsidev);
eb3f0f9c 2861 if (likely(dev))
2115ea94 2862 rc = __ata_scsi_queuecmd(cmd, done, dev);
eb3f0f9c 2863 else {
1da177e4
LT
2864 cmd->result = (DID_BAD_TARGET << 16);
2865 done(cmd);
1da177e4
LT
2866 }
2867
ba6a1308 2868 spin_unlock(ap->lock);
005a5a06 2869 spin_lock(shost->host_lock);
2115ea94 2870 return rc;
1da177e4
LT
2871}
2872
2873/**
2874 * ata_scsi_simulate - simulate SCSI command on ATA device
c893a3ae 2875 * @dev: the target device
1da177e4
LT
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:
cca3974e 2883 * spin_lock_irqsave(host lock)
1da177e4
LT
2884 */
2885
3373efd8 2886void ata_scsi_simulate(struct ata_device *dev, struct scsi_cmnd *cmd,
1da177e4
LT
2887 void (*done)(struct scsi_cmnd *))
2888{
2889 struct ata_scsi_args args;
057ace5e 2890 const u8 *scsicmd = cmd->cmnd;
45394145 2891 u8 tmp8;
1da177e4 2892
9a3dccc4
TH
2893 args.dev = dev;
2894 args.id = dev->id;
1da177e4
LT
2895 args.cmd = cmd;
2896 args.done = done;
2897
2898 switch(scsicmd[0]) {
2dcb407e
JG
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? */
00bd0202 2906 ata_scsi_invalid_field(cmd, done);
2dcb407e
JG
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);
1da177e4 2912 break;
2dcb407e
JG
2913 case 0x80:
2914 ata_scsi_rbuf_fill(&args, ata_scsiop_inq_80);
1da177e4 2915 break;
2dcb407e
JG
2916 case 0x83:
2917 ata_scsi_rbuf_fill(&args, ata_scsiop_inq_83);
1da177e4 2918 break;
2dcb407e
JG
2919 case 0x89:
2920 ata_scsi_rbuf_fill(&args, ata_scsiop_inq_89);
2921 break;
2922 default:
ae006510 2923 ata_scsi_invalid_field(cmd, done);
1da177e4 2924 break;
2dcb407e
JG
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;
1da177e4 2937
2dcb407e
JG
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)
1da177e4 2944 ata_scsi_rbuf_fill(&args, ata_scsiop_read_cap);
2dcb407e
JG
2945 else
2946 ata_scsi_invalid_field(cmd, done);
2947 break;
1da177e4 2948
2dcb407e
JG
2949 case REPORT_LUNS:
2950 ata_scsi_rbuf_fill(&args, ata_scsiop_report_luns);
2951 break;
1da177e4 2952
2dcb407e
JG
2953 case REQUEST_SENSE:
2954 ata_scsi_set_sense(cmd, 0, 0, 0);
2955 cmd->result = (DRIVER_SENSE << 24);
2956 done(cmd);
2957 break;
1da177e4 2958
2dcb407e
JG
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;
45394145 2972
2dcb407e
JG
2973 case SEND_DIAGNOSTIC:
2974 tmp8 = scsicmd[1] & ~(1 << 3);
2975 if ((tmp8 == 0x4) && (!scsicmd[3]) && (!scsicmd[4]))
00bd0202 2976 ata_scsi_rbuf_fill(&args, ata_scsiop_noop);
2dcb407e
JG
2977 else
2978 ata_scsi_invalid_field(cmd, done);
2979 break;
1da177e4 2980
2dcb407e
JG
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;
1da177e4
LT
2987 }
2988}
2989
f3187195
TH
2990int 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
31cc23b3
TH
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
f3187195
TH
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
1ae46317 3039void ata_scsi_scan_host(struct ata_port *ap, int sync)
644dd0cc 3040{
1ae46317
TH
3041 int tries = 5;
3042 struct ata_device *last_failed_dev = NULL;
41bda9c9 3043 struct ata_link *link;
1ae46317 3044 struct ata_device *dev;
644dd0cc 3045
198e0fed 3046 if (ap->flags & ATA_FLAG_DISABLED)
644dd0cc
JG
3047 return;
3048
1ae46317 3049 repeat:
41bda9c9
TH
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;
3edebac4 3054
41bda9c9
TH
3055 if (!ata_dev_enabled(dev) || dev->sdev)
3056 continue;
3f19ee8c 3057
41bda9c9
TH
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 }
3edebac4 3069 }
3f19ee8c 3070 }
1ae46317
TH
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 */
41bda9c9
TH
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 }
1ae46317 3081 }
41bda9c9
TH
3082 exit_loop:
3083 if (!link)
1ae46317
TH
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));
644dd0cc 3112}
0ea035a3
TH
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
cca3974e 3120 * function is called with host lock which protects dev->sdev
0ea035a3
TH
3121 * against clearing.
3122 *
3123 * LOCKING:
cca3974e 3124 * spin_lock_irqsave(host lock)
0ea035a3
TH
3125 *
3126 * RETURNS:
3127 * 1 if attached SCSI device exists, 0 otherwise.
3128 */
3129int 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}
580b2102
TH
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 */
3148static void ata_scsi_remove_dev(struct ata_device *dev)
3149{
9af5c9c9 3150 struct ata_port *ap = dev->link->ap;
580b2102
TH
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 */
cca3974e 3160 mutex_lock(&ap->scsi_host->scan_mutex);
ba6a1308 3161 spin_lock_irqsave(ap->lock, flags);
580b2102 3162
cca3974e 3163 /* clearing dev->sdev is protected by host lock */
580b2102
TH
3164 sdev = dev->sdev;
3165 dev->sdev = NULL;
3166
3167 if (sdev) {
3168 /* If user initiated unplug races with us, sdev can go
cca3974e 3169 * away underneath us after the host lock and
580b2102
TH
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
ba6a1308 3185 spin_unlock_irqrestore(ap->lock, flags);
cca3974e 3186 mutex_unlock(&ap->scsi_host->scan_mutex);
580b2102
TH
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
41bda9c9
TH
3197static 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
2f294968
KCA
3216/**
3217 * ata_scsi_media_change_notify - send media change event
c5d0e6a0 3218 * @dev: Pointer to the disk device with media change event
2f294968
KCA
3219 *
3220 * Tell the block layer to send a media change notification
3221 * event.
3222 *
3223 * LOCKING:
854c73a2 3224 * spin_lock_irqsave(host lock)
2f294968 3225 */
854c73a2 3226void ata_scsi_media_change_notify(struct ata_device *dev)
2f294968
KCA
3227{
3228#ifdef OTHER_AN_PATCHES_HAVE_BEEN_APPLIED
854c73a2
TH
3229 if (dev->sdev)
3230 scsi_device_event_notify(dev->sdev, SDEV_MEDIA_CHANGE);
2f294968
KCA
3231#endif
3232}
2f294968 3233
580b2102
TH
3234/**
3235 * ata_scsi_hotplug - SCSI part of hotplug
65f27f38 3236 * @work: Pointer to ATA port to perform SCSI hotplug on
580b2102
TH
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 */
65f27f38 3246void ata_scsi_hotplug(struct work_struct *work)
580b2102 3247{
65f27f38
DH
3248 struct ata_port *ap =
3249 container_of(work, struct ata_port, hotplug_task.work);
41bda9c9 3250 int i;
580b2102 3251
b51e9e5d 3252 if (ap->pflags & ATA_PFLAG_UNLOADING) {
580b2102
TH
3253 DPRINTK("ENTER/EXIT - unloading\n");
3254 return;
3255 }
3256
3257 DPRINTK("ENTER\n");
3258
41bda9c9
TH
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]);
580b2102
TH
3267
3268 /* scan for new ones */
1ae46317 3269 ata_scsi_scan_host(ap, 0);
580b2102
TH
3270
3271 DPRINTK("EXIT\n");
3272}
83c47bcb
TH
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 */
3290static 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;
41bda9c9 3295 int devno, rc = 0;
83c47bcb
TH
3296
3297 if (!ap->ops->error_handler)
3298 return -EOPNOTSUPP;
3299
41bda9c9 3300 if (lun != SCAN_WILD_CARD && lun)
83c47bcb
TH
3301 return -EINVAL;
3302
41bda9c9
TH
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
ba6a1308 3313 spin_lock_irqsave(ap->lock, flags);
83c47bcb 3314
41bda9c9
TH
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 }
83c47bcb 3323 } else {
41bda9c9 3324 struct ata_device *dev = ata_find_dev(ap, devno);
83c47bcb
TH
3325
3326 if (dev) {
41bda9c9 3327 struct ata_eh_info *ehi = &dev->link->eh_info;
9af5c9c9
TH
3328 ehi->probe_mask |= 1 << dev->devno;
3329 ehi->action |= ATA_EH_SOFTRESET;
3330 ehi->flags |= ATA_EHI_RESUME_LINK;
83c47bcb
TH
3331 } else
3332 rc = -EINVAL;
3333 }
3334
309afcb5 3335 if (rc == 0) {
83c47bcb 3336 ata_port_schedule_eh(ap);
309afcb5
TH
3337 spin_unlock_irqrestore(ap->lock, flags);
3338 ata_port_wait_eh(ap);
3339 } else
3340 spin_unlock_irqrestore(ap->lock, flags);
83c47bcb
TH
3341
3342 return rc;
3343}
3057ac3c 3344
3345/**
d0171269 3346 * ata_scsi_dev_rescan - initiate scsi_rescan_device()
65f27f38 3347 * @work: Pointer to ATA port to perform scsi_rescan_device()
3057ac3c 3348 *
d0171269
TH
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.
3057ac3c 3353 *
d0171269
TH
3354 * LOCKING:
3355 * Kernel thread context (may sleep).
3057ac3c 3356 */
65f27f38 3357void ata_scsi_dev_rescan(struct work_struct *work)
3057ac3c 3358{
65f27f38
DH
3359 struct ata_port *ap =
3360 container_of(work, struct ata_port, scsi_rescan_task);
41bda9c9 3361 struct ata_link *link;
f58229f8 3362 struct ata_device *dev;
f84e7e41 3363 unsigned long flags;
3057ac3c 3364
f84e7e41
TH
3365 spin_lock_irqsave(ap->lock, flags);
3366
41bda9c9
TH
3367 ata_port_for_each_link(link, ap) {
3368 ata_link_for_each_dev(dev, link) {
3369 struct scsi_device *sdev = dev->sdev;
3057ac3c 3370
41bda9c9
TH
3371 if (!ata_dev_enabled(dev) || !sdev)
3372 continue;
3373 if (scsi_device_get(sdev))
3374 continue;
f84e7e41 3375
41bda9c9
TH
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 }
3057ac3c 3381 }
f84e7e41
TH
3382
3383 spin_unlock_irqrestore(ap->lock, flags);
3057ac3c 3384}
80289167
BK
3385
3386/**
3387 * ata_sas_port_alloc - Allocate port for a SAS attached SATA device
4f931374 3388 * @host: ATA host container for all SAS ports
80289167 3389 * @port_info: Information from low-level host driver
cca3974e 3390 * @shost: SCSI host that the scsi device is attached to
80289167
BK
3391 *
3392 * LOCKING:
3393 * PCI/etc. bus probe sem.
3394 *
3395 * RETURNS:
3396 * ata_port pointer on success / NULL on failure.
3397 */
3398
cca3974e 3399struct ata_port *ata_sas_port_alloc(struct ata_host *host,
80289167 3400 struct ata_port_info *port_info,
cca3974e 3401 struct Scsi_Host *shost)
80289167 3402{
f3187195 3403 struct ata_port *ap;
80289167 3404
f3187195 3405 ap = ata_port_alloc(host);
80289167
BK
3406 if (!ap)
3407 return NULL;
3408
f3187195 3409 ap->port_no = 0;
cca3974e 3410 ap->lock = shost->host_lock;
f3187195
TH
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
80289167
BK
3418 return ap;
3419}
3420EXPORT_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 */
3434int ata_sas_port_start(struct ata_port *ap)
3435{
3436 return ata_pad_alloc(ap, ap->dev);
3437}
3438EXPORT_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
3452void ata_sas_port_stop(struct ata_port *ap)
3453{
3454 ata_pad_free(ap, ap->dev);
3455}
3456EXPORT_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
3469int ata_sas_port_init(struct ata_port *ap)
3470{
3471 int rc = ap->ops->port_start(ap);
3472
f3187195
TH
3473 if (!rc) {
3474 ap->print_id = ata_print_id++;
80289167 3475 rc = ata_bus_probe(ap);
f3187195 3476 }
80289167
BK
3477
3478 return rc;
3479}
3480EXPORT_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
3488void ata_sas_port_destroy(struct ata_port *ap)
3489{
f0d36efd
TH
3490 if (ap->ops->port_stop)
3491 ap->ops->port_stop(ap);
80289167
BK
3492 kfree(ap);
3493}
3494EXPORT_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
3505int ata_sas_slave_configure(struct scsi_device *sdev, struct ata_port *ap)
3506{
3507 ata_scsi_sdev_config(sdev);
9af5c9c9 3508 ata_scsi_dev_config(sdev, ap->link.device);
80289167
BK
3509 return 0;
3510}
3511EXPORT_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:
08475a19
BK
3520 * Return value from __ata_scsi_queuecmd() if @cmd can be queued,
3521 * 0 otherwise.
80289167
BK
3522 */
3523
3524int ata_sas_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *),
3525 struct ata_port *ap)
3526{
08475a19
BK
3527 int rc = 0;
3528
80289167
BK
3529 ata_scsi_dump_cdb(ap, cmd);
3530
9af5c9c9
TH
3531 if (likely(ata_scsi_dev_enabled(ap->link.device)))
3532 rc = __ata_scsi_queuecmd(cmd, done, ap->link.device);
80289167
BK
3533 else {
3534 cmd->result = (DID_BAD_TARGET << 16);
3535 done(cmd);
3536 }
08475a19 3537 return rc;
80289167
BK
3538}
3539EXPORT_SYMBOL_GPL(ata_sas_queuecmd);