OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [drivers/] [ata/] [libata-scsi.c] - Blame information for rev 62

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.