1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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#include <linux/suspend.h>
50
51#include "libata.h"
52
53#define SECTOR_SIZE 512
54#define ATA_SCSI_RBUF_SIZE 4096
55
56static DEFINE_SPINLOCK(ata_scsi_rbuf_lock);
57static u8 ata_scsi_rbuf[ATA_SCSI_RBUF_SIZE];
58
59typedef unsigned int (*ata_xlat_func_t)(struct ata_queued_cmd *qc);
60
61static struct ata_device *__ata_scsi_find_dev(struct ata_port *ap,
62 const struct scsi_device *scsidev);
63static struct ata_device *ata_scsi_find_dev(struct ata_port *ap,
64 const struct scsi_device *scsidev);
65static int ata_scsi_user_scan(struct Scsi_Host *shost, unsigned int channel,
66 unsigned int id, unsigned int lun);
67
68
69#define RW_RECOVERY_MPAGE 0x1
70#define RW_RECOVERY_MPAGE_LEN 12
71#define CACHE_MPAGE 0x8
72#define CACHE_MPAGE_LEN 20
73#define CONTROL_MPAGE 0xa
74#define CONTROL_MPAGE_LEN 12
75#define ALL_MPAGES 0x3f
76#define ALL_SUB_MPAGES 0xff
77
78
79static const u8 def_rw_recovery_mpage[RW_RECOVERY_MPAGE_LEN] = {
80 RW_RECOVERY_MPAGE,
81 RW_RECOVERY_MPAGE_LEN - 2,
82 (1 << 7),
83 0,
84 0, 0, 0, 0,
85 0,
86 0, 0, 0
87};
88
89static const u8 def_cache_mpage[CACHE_MPAGE_LEN] = {
90 CACHE_MPAGE,
91 CACHE_MPAGE_LEN - 2,
92 0,
93 0, 0, 0, 0, 0, 0, 0, 0, 0,
94 0,
95 0, 0, 0, 0, 0, 0, 0
96};
97
98static const u8 def_control_mpage[CONTROL_MPAGE_LEN] = {
99 CONTROL_MPAGE,
100 CONTROL_MPAGE_LEN - 2,
101 2,
102 0,
103 0, 0, 0, 0, 0xff, 0xff,
104 0, 30
105};
106
107
108
109
110
111static struct scsi_transport_template ata_scsi_transport_template = {
112 .eh_strategy_handler = ata_scsi_error,
113 .eh_timed_out = ata_scsi_timed_out,
114 .user_scan = ata_scsi_user_scan,
115};
116
117
118static const struct {
119 enum link_pm value;
120 const char *name;
121} link_pm_policy[] = {
122 { NOT_AVAILABLE, "max_performance" },
123 { MIN_POWER, "min_power" },
124 { MAX_PERFORMANCE, "max_performance" },
125 { MEDIUM_POWER, "medium_power" },
126};
127
128static const char *ata_scsi_lpm_get(enum link_pm policy)
129{
130 int i;
131
132 for (i = 0; i < ARRAY_SIZE(link_pm_policy); i++)
133 if (link_pm_policy[i].value == policy)
134 return link_pm_policy[i].name;
135
136 return NULL;
137}
138
139static ssize_t ata_scsi_lpm_put(struct device *dev,
140 struct device_attribute *attr,
141 const char *buf, size_t count)
142{
143 struct Scsi_Host *shost = class_to_shost(dev);
144 struct ata_port *ap = ata_shost_to_port(shost);
145 enum link_pm policy = 0;
146 int i;
147
148
149
150
151
152
153
154
155 for (i = 1; i < ARRAY_SIZE(link_pm_policy); i++) {
156 const int len = strlen(link_pm_policy[i].name);
157 if (strncmp(link_pm_policy[i].name, buf, len) == 0 &&
158 buf[len] == '\n') {
159 policy = link_pm_policy[i].value;
160 break;
161 }
162 }
163 if (!policy)
164 return -EINVAL;
165
166 ata_lpm_schedule(ap, policy);
167 return count;
168}
169
170static ssize_t
171ata_scsi_lpm_show(struct device *dev, struct device_attribute *attr, char *buf)
172{
173 struct Scsi_Host *shost = class_to_shost(dev);
174 struct ata_port *ap = ata_shost_to_port(shost);
175 const char *policy =
176 ata_scsi_lpm_get(ap->pm_policy);
177
178 if (!policy)
179 return -EINVAL;
180
181 return snprintf(buf, 23, "%s\n", policy);
182}
183DEVICE_ATTR(link_power_management_policy, S_IRUGO | S_IWUSR,
184 ata_scsi_lpm_show, ata_scsi_lpm_put);
185EXPORT_SYMBOL_GPL(dev_attr_link_power_management_policy);
186
187static ssize_t ata_scsi_park_show(struct device *device,
188 struct device_attribute *attr, char *buf)
189{
190 struct scsi_device *sdev = to_scsi_device(device);
191 struct ata_port *ap;
192 struct ata_link *link;
193 struct ata_device *dev;
194 unsigned long flags, now;
195 unsigned int uninitialized_var(msecs);
196 int rc = 0;
197
198 ap = ata_shost_to_port(sdev->host);
199
200 spin_lock_irqsave(ap->lock, flags);
201 dev = ata_scsi_find_dev(ap, sdev);
202 if (!dev) {
203 rc = -ENODEV;
204 goto unlock;
205 }
206 if (dev->flags & ATA_DFLAG_NO_UNLOAD) {
207 rc = -EOPNOTSUPP;
208 goto unlock;
209 }
210
211 link = dev->link;
212 now = jiffies;
213 if (ap->pflags & ATA_PFLAG_EH_IN_PROGRESS &&
214 link->eh_context.unloaded_mask & (1 << dev->devno) &&
215 time_after(dev->unpark_deadline, now))
216 msecs = jiffies_to_msecs(dev->unpark_deadline - now);
217 else
218 msecs = 0;
219
220unlock:
221 spin_unlock_irq(ap->lock);
222
223 return rc ? rc : snprintf(buf, 20, "%u\n", msecs);
224}
225
226static ssize_t ata_scsi_park_store(struct device *device,
227 struct device_attribute *attr,
228 const char *buf, size_t len)
229{
230 struct scsi_device *sdev = to_scsi_device(device);
231 struct ata_port *ap;
232 struct ata_device *dev;
233 long int input;
234 unsigned long flags;
235 int rc;
236
237 rc = strict_strtol(buf, 10, &input);
238 if (rc || input < -2)
239 return -EINVAL;
240 if (input > ATA_TMOUT_MAX_PARK) {
241 rc = -EOVERFLOW;
242 input = ATA_TMOUT_MAX_PARK;
243 }
244
245 ap = ata_shost_to_port(sdev->host);
246
247 spin_lock_irqsave(ap->lock, flags);
248 dev = ata_scsi_find_dev(ap, sdev);
249 if (unlikely(!dev)) {
250 rc = -ENODEV;
251 goto unlock;
252 }
253 if (dev->class != ATA_DEV_ATA) {
254 rc = -EOPNOTSUPP;
255 goto unlock;
256 }
257
258 if (input >= 0) {
259 if (dev->flags & ATA_DFLAG_NO_UNLOAD) {
260 rc = -EOPNOTSUPP;
261 goto unlock;
262 }
263
264 dev->unpark_deadline = ata_deadline(jiffies, input);
265 dev->link->eh_info.dev_action[dev->devno] |= ATA_EH_PARK;
266 ata_port_schedule_eh(ap);
267 complete(&ap->park_req_pending);
268 } else {
269 switch (input) {
270 case -1:
271 dev->flags &= ~ATA_DFLAG_NO_UNLOAD;
272 break;
273 case -2:
274 dev->flags |= ATA_DFLAG_NO_UNLOAD;
275 break;
276 }
277 }
278unlock:
279 spin_unlock_irqrestore(ap->lock, flags);
280
281 return rc ? rc : len;
282}
283DEVICE_ATTR(unload_heads, S_IRUGO | S_IWUSR,
284 ata_scsi_park_show, ata_scsi_park_store);
285EXPORT_SYMBOL_GPL(dev_attr_unload_heads);
286
287static void ata_scsi_set_sense(struct scsi_cmnd *cmd, u8 sk, u8 asc, u8 ascq)
288{
289 cmd->result = (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION;
290
291 scsi_build_sense_buffer(0, cmd->sense_buffer, sk, asc, ascq);
292}
293
294static ssize_t
295ata_scsi_em_message_store(struct device *dev, struct device_attribute *attr,
296 const char *buf, size_t count)
297{
298 struct Scsi_Host *shost = class_to_shost(dev);
299 struct ata_port *ap = ata_shost_to_port(shost);
300 if (ap->ops->em_store && (ap->flags & ATA_FLAG_EM))
301 return ap->ops->em_store(ap, buf, count);
302 return -EINVAL;
303}
304
305static ssize_t
306ata_scsi_em_message_show(struct device *dev, struct device_attribute *attr,
307 char *buf)
308{
309 struct Scsi_Host *shost = class_to_shost(dev);
310 struct ata_port *ap = ata_shost_to_port(shost);
311
312 if (ap->ops->em_show && (ap->flags & ATA_FLAG_EM))
313 return ap->ops->em_show(ap, buf);
314 return -EINVAL;
315}
316DEVICE_ATTR(em_message, S_IRUGO | S_IWUGO,
317 ata_scsi_em_message_show, ata_scsi_em_message_store);
318EXPORT_SYMBOL_GPL(dev_attr_em_message);
319
320static ssize_t
321ata_scsi_em_message_type_show(struct device *dev, struct device_attribute *attr,
322 char *buf)
323{
324 struct Scsi_Host *shost = class_to_shost(dev);
325 struct ata_port *ap = ata_shost_to_port(shost);
326
327 return snprintf(buf, 23, "%d\n", ap->em_message_type);
328}
329DEVICE_ATTR(em_message_type, S_IRUGO,
330 ata_scsi_em_message_type_show, NULL);
331EXPORT_SYMBOL_GPL(dev_attr_em_message_type);
332
333static ssize_t
334ata_scsi_activity_show(struct device *dev, struct device_attribute *attr,
335 char *buf)
336{
337 struct scsi_device *sdev = to_scsi_device(dev);
338 struct ata_port *ap = ata_shost_to_port(sdev->host);
339 struct ata_device *atadev = ata_scsi_find_dev(ap, sdev);
340
341 if (ap->ops->sw_activity_show && (ap->flags & ATA_FLAG_SW_ACTIVITY))
342 return ap->ops->sw_activity_show(atadev, buf);
343 return -EINVAL;
344}
345
346static ssize_t
347ata_scsi_activity_store(struct device *dev, struct device_attribute *attr,
348 const char *buf, size_t count)
349{
350 struct scsi_device *sdev = to_scsi_device(dev);
351 struct ata_port *ap = ata_shost_to_port(sdev->host);
352 struct ata_device *atadev = ata_scsi_find_dev(ap, sdev);
353 enum sw_activity val;
354 int rc;
355
356 if (ap->ops->sw_activity_store && (ap->flags & ATA_FLAG_SW_ACTIVITY)) {
357 val = simple_strtoul(buf, NULL, 0);
358 switch (val) {
359 case OFF: case BLINK_ON: case BLINK_OFF:
360 rc = ap->ops->sw_activity_store(atadev, val);
361 if (!rc)
362 return count;
363 else
364 return rc;
365 }
366 }
367 return -EINVAL;
368}
369DEVICE_ATTR(sw_activity, S_IWUGO | S_IRUGO, ata_scsi_activity_show,
370 ata_scsi_activity_store);
371EXPORT_SYMBOL_GPL(dev_attr_sw_activity);
372
373struct device_attribute *ata_common_sdev_attrs[] = {
374 &dev_attr_unload_heads,
375 NULL
376};
377EXPORT_SYMBOL_GPL(ata_common_sdev_attrs);
378
379static void ata_scsi_invalid_field(struct scsi_cmnd *cmd,
380 void (*done)(struct scsi_cmnd *))
381{
382 ata_scsi_set_sense(cmd, ILLEGAL_REQUEST, 0x24, 0x0);
383
384 done(cmd);
385}
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405int ata_std_bios_param(struct scsi_device *sdev, struct block_device *bdev,
406 sector_t capacity, int geom[])
407{
408 geom[0] = 255;
409 geom[1] = 63;
410 sector_div(capacity, 255*63);
411 geom[2] = capacity;
412
413 return 0;
414}
415
416
417
418
419
420
421
422
423
424
425
426
427
428static int ata_get_identity(struct ata_port *ap, struct scsi_device *sdev,
429 void __user *arg)
430{
431 struct ata_device *dev = ata_scsi_find_dev(ap, sdev);
432 u16 __user *dst = arg;
433 char buf[40];
434
435 if (!dev)
436 return -ENOMSG;
437
438 if (copy_to_user(dst, dev->id, ATA_ID_WORDS * sizeof(u16)))
439 return -EFAULT;
440
441 ata_id_string(dev->id, buf, ATA_ID_PROD, ATA_ID_PROD_LEN);
442 if (copy_to_user(dst + ATA_ID_PROD, buf, ATA_ID_PROD_LEN))
443 return -EFAULT;
444
445 ata_id_string(dev->id, buf, ATA_ID_FW_REV, ATA_ID_FW_REV_LEN);
446 if (copy_to_user(dst + ATA_ID_FW_REV, buf, ATA_ID_FW_REV_LEN))
447 return -EFAULT;
448
449 ata_id_string(dev->id, buf, ATA_ID_SERNO, ATA_ID_SERNO_LEN);
450 if (copy_to_user(dst + ATA_ID_SERNO, buf, ATA_ID_SERNO_LEN))
451 return -EFAULT;
452
453 return 0;
454}
455
456
457
458
459
460
461
462
463
464
465
466
467int ata_cmd_ioctl(struct scsi_device *scsidev, void __user *arg)
468{
469 int rc = 0;
470 u8 scsi_cmd[MAX_COMMAND_SIZE];
471 u8 args[4], *argbuf = NULL, *sensebuf = NULL;
472 int argsize = 0;
473 enum dma_data_direction data_dir;
474 int cmd_result;
475
476 if (arg == NULL)
477 return -EINVAL;
478
479 if (copy_from_user(args, arg, sizeof(args)))
480 return -EFAULT;
481
482 sensebuf = kzalloc(SCSI_SENSE_BUFFERSIZE, GFP_NOIO);
483 if (!sensebuf)
484 return -ENOMEM;
485
486 memset(scsi_cmd, 0, sizeof(scsi_cmd));
487
488 if (args[3]) {
489 argsize = SECTOR_SIZE * args[3];
490 argbuf = kmalloc(argsize, GFP_KERNEL);
491 if (argbuf == NULL) {
492 rc = -ENOMEM;
493 goto error;
494 }
495
496 scsi_cmd[1] = (4 << 1);
497 scsi_cmd[2] = 0x0e;
498
499 data_dir = DMA_FROM_DEVICE;
500 } else {
501 scsi_cmd[1] = (3 << 1);
502 scsi_cmd[2] = 0x20;
503 data_dir = DMA_NONE;
504 }
505
506 scsi_cmd[0] = ATA_16;
507
508 scsi_cmd[4] = args[2];
509 if (args[0] == ATA_CMD_SMART) {
510 scsi_cmd[6] = args[3];
511 scsi_cmd[8] = args[1];
512 scsi_cmd[10] = 0x4f;
513 scsi_cmd[12] = 0xc2;
514 } else {
515 scsi_cmd[6] = args[1];
516 }
517 scsi_cmd[14] = args[0];
518
519
520
521 cmd_result = scsi_execute(scsidev, scsi_cmd, data_dir, argbuf, argsize,
522 sensebuf, (10*HZ), 5, 0, NULL);
523
524 if (driver_byte(cmd_result) == DRIVER_SENSE) {
525 u8 *desc = sensebuf + 8;
526 cmd_result &= ~(0xFF<<24);
527
528
529
530 if (cmd_result & SAM_STAT_CHECK_CONDITION) {
531 struct scsi_sense_hdr sshdr;
532 scsi_normalize_sense(sensebuf, SCSI_SENSE_BUFFERSIZE,
533 &sshdr);
534 if (sshdr.sense_key == 0 &&
535 sshdr.asc == 0 && sshdr.ascq == 0)
536 cmd_result &= ~SAM_STAT_CHECK_CONDITION;
537 }
538
539
540 if (sensebuf[0] == 0x72 &&
541 desc[0] == 0x09) {
542 args[0] = desc[13];
543 args[1] = desc[3];
544 args[2] = desc[5];
545 if (copy_to_user(arg, args, sizeof(args)))
546 rc = -EFAULT;
547 }
548 }
549
550
551 if (cmd_result) {
552 rc = -EIO;
553 goto error;
554 }
555
556 if ((argbuf)
557 && copy_to_user(arg + sizeof(args), argbuf, argsize))
558 rc = -EFAULT;
559error:
560 kfree(sensebuf);
561 kfree(argbuf);
562 return rc;
563}
564
565
566
567
568
569
570
571
572
573
574
575
576int ata_task_ioctl(struct scsi_device *scsidev, void __user *arg)
577{
578 int rc = 0;
579 u8 scsi_cmd[MAX_COMMAND_SIZE];
580 u8 args[7], *sensebuf = NULL;
581 int cmd_result;
582
583 if (arg == NULL)
584 return -EINVAL;
585
586 if (copy_from_user(args, arg, sizeof(args)))
587 return -EFAULT;
588
589 sensebuf = kzalloc(SCSI_SENSE_BUFFERSIZE, GFP_NOIO);
590 if (!sensebuf)
591 return -ENOMEM;
592
593 memset(scsi_cmd, 0, sizeof(scsi_cmd));
594 scsi_cmd[0] = ATA_16;
595 scsi_cmd[1] = (3 << 1);
596 scsi_cmd[2] = 0x20;
597 scsi_cmd[4] = args[1];
598 scsi_cmd[6] = args[2];
599 scsi_cmd[8] = args[3];
600 scsi_cmd[10] = args[4];
601 scsi_cmd[12] = args[5];
602 scsi_cmd[13] = args[6] & 0x4f;
603 scsi_cmd[14] = args[0];
604
605
606
607 cmd_result = scsi_execute(scsidev, scsi_cmd, DMA_NONE, NULL, 0,
608 sensebuf, (10*HZ), 5, 0, NULL);
609
610 if (driver_byte(cmd_result) == DRIVER_SENSE) {
611 u8 *desc = sensebuf + 8;
612 cmd_result &= ~(0xFF<<24);
613
614
615
616 if (cmd_result & SAM_STAT_CHECK_CONDITION) {
617 struct scsi_sense_hdr sshdr;
618 scsi_normalize_sense(sensebuf, SCSI_SENSE_BUFFERSIZE,
619 &sshdr);
620 if (sshdr.sense_key == 0 &&
621 sshdr.asc == 0 && sshdr.ascq == 0)
622 cmd_result &= ~SAM_STAT_CHECK_CONDITION;
623 }
624
625
626 if (sensebuf[0] == 0x72 &&
627 desc[0] == 0x09) {
628 args[0] = desc[13];
629 args[1] = desc[3];
630 args[2] = desc[5];
631 args[3] = desc[7];
632 args[4] = desc[9];
633 args[5] = desc[11];
634 args[6] = desc[12];
635 if (copy_to_user(arg, args, sizeof(args)))
636 rc = -EFAULT;
637 }
638 }
639
640 if (cmd_result) {
641 rc = -EIO;
642 goto error;
643 }
644
645 error:
646 kfree(sensebuf);
647 return rc;
648}
649
650int ata_sas_scsi_ioctl(struct ata_port *ap, struct scsi_device *scsidev,
651 int cmd, void __user *arg)
652{
653 int val = -EINVAL, rc = -EINVAL;
654
655 switch (cmd) {
656 case ATA_IOC_GET_IO32:
657 val = 0;
658 if (copy_to_user(arg, &val, 1))
659 return -EFAULT;
660 return 0;
661
662 case ATA_IOC_SET_IO32:
663 val = (unsigned long) arg;
664 if (val != 0)
665 return -EINVAL;
666 return 0;
667
668 case HDIO_GET_IDENTITY:
669 return ata_get_identity(ap, scsidev, arg);
670
671 case HDIO_DRIVE_CMD:
672 if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO))
673 return -EACCES;
674 return ata_cmd_ioctl(scsidev, arg);
675
676 case HDIO_DRIVE_TASK:
677 if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO))
678 return -EACCES;
679 return ata_task_ioctl(scsidev, arg);
680
681 default:
682 rc = -ENOTTY;
683 break;
684 }
685
686 return rc;
687}
688EXPORT_SYMBOL_GPL(ata_sas_scsi_ioctl);
689
690int ata_scsi_ioctl(struct scsi_device *scsidev, int cmd, void __user *arg)
691{
692 return ata_sas_scsi_ioctl(ata_shost_to_port(scsidev->host),
693 scsidev, cmd, arg);
694}
695EXPORT_SYMBOL_GPL(ata_scsi_ioctl);
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717static struct ata_queued_cmd *ata_scsi_qc_new(struct ata_device *dev,
718 struct scsi_cmnd *cmd,
719 void (*done)(struct scsi_cmnd *))
720{
721 struct ata_queued_cmd *qc;
722
723 qc = ata_qc_new_init(dev);
724 if (qc) {
725 qc->scsicmd = cmd;
726 qc->scsidone = done;
727
728 qc->sg = scsi_sglist(cmd);
729 qc->n_elem = scsi_sg_count(cmd);
730 } else {
731 cmd->result = (DID_OK << 16) | (QUEUE_FULL << 1);
732 done(cmd);
733 }
734
735 return qc;
736}
737
738static void ata_qc_set_pc_nbytes(struct ata_queued_cmd *qc)
739{
740 struct scsi_cmnd *scmd = qc->scsicmd;
741
742 qc->extrabytes = scmd->request->extra_len;
743 qc->nbytes = scsi_bufflen(scmd) + qc->extrabytes;
744}
745
746
747
748
749
750
751
752
753
754
755
756
757
758static void ata_dump_status(unsigned id, struct ata_taskfile *tf)
759{
760 u8 stat = tf->command, err = tf->feature;
761
762 printk(KERN_WARNING "ata%u: status=0x%02x { ", id, stat);
763 if (stat & ATA_BUSY) {
764 printk("Busy }\n");
765 } else {
766 if (stat & 0x40) printk("DriveReady ");
767 if (stat & 0x20) printk("DeviceFault ");
768 if (stat & 0x10) printk("SeekComplete ");
769 if (stat & 0x08) printk("DataRequest ");
770 if (stat & 0x04) printk("CorrectedError ");
771 if (stat & 0x02) printk("Index ");
772 if (stat & 0x01) printk("Error ");
773 printk("}\n");
774
775 if (err) {
776 printk(KERN_WARNING "ata%u: error=0x%02x { ", id, err);
777 if (err & 0x04) printk("DriveStatusError ");
778 if (err & 0x80) {
779 if (err & 0x04) printk("BadCRC ");
780 else printk("Sector ");
781 }
782 if (err & 0x40) printk("UncorrectableError ");
783 if (err & 0x10) printk("SectorIdNotFound ");
784 if (err & 0x02) printk("TrackZeroNotFound ");
785 if (err & 0x01) printk("AddrMarkNotFound ");
786 printk("}\n");
787 }
788 }
789}
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808static void ata_to_sense_error(unsigned id, u8 drv_stat, u8 drv_err, u8 *sk,
809 u8 *asc, u8 *ascq, int verbose)
810{
811 int i;
812
813
814 static const unsigned char sense_table[][4] = {
815
816 {0xd1, ABORTED_COMMAND, 0x00, 0x00},
817
818 {0xd0, ABORTED_COMMAND, 0x00, 0x00},
819
820 {0x61, HARDWARE_ERROR, 0x00, 0x00},
821
822 {0x84, ABORTED_COMMAND, 0x47, 0x00},
823
824 {0x37, NOT_READY, 0x04, 0x00},
825
826 {0x09, NOT_READY, 0x04, 0x00},
827
828 {0x01, MEDIUM_ERROR, 0x13, 0x00},
829
830 {0x02, HARDWARE_ERROR, 0x00, 0x00},
831
832 {0x04, ABORTED_COMMAND, 0x00, 0x00},
833
834 {0x08, NOT_READY, 0x04, 0x00},
835
836 {0x10, ABORTED_COMMAND, 0x14, 0x00},
837
838 {0x08, NOT_READY, 0x04, 0x00},
839
840 {0x40, MEDIUM_ERROR, 0x11, 0x04},
841
842 {0x80, MEDIUM_ERROR, 0x11, 0x04},
843 {0xFF, 0xFF, 0xFF, 0xFF},
844 };
845 static const unsigned char stat_table[][4] = {
846
847 {0x80, ABORTED_COMMAND, 0x47, 0x00},
848 {0x20, HARDWARE_ERROR, 0x00, 0x00},
849 {0x08, ABORTED_COMMAND, 0x47, 0x00},
850 {0x04, RECOVERED_ERROR, 0x11, 0x00},
851 {0xFF, 0xFF, 0xFF, 0xFF},
852 };
853
854
855
856
857 if (drv_stat & ATA_BUSY) {
858 drv_err = 0;
859 }
860
861 if (drv_err) {
862
863 for (i = 0; sense_table[i][0] != 0xFF; i++) {
864
865 if ((sense_table[i][0] & drv_err) ==
866 sense_table[i][0]) {
867 *sk = sense_table[i][1];
868 *asc = sense_table[i][2];
869 *ascq = sense_table[i][3];
870 goto translate_done;
871 }
872 }
873
874 if (verbose)
875 printk(KERN_WARNING "ata%u: no sense translation for "
876 "error 0x%02x\n", id, drv_err);
877 }
878
879
880 for (i = 0; stat_table[i][0] != 0xFF; i++) {
881 if (stat_table[i][0] & drv_stat) {
882 *sk = stat_table[i][1];
883 *asc = stat_table[i][2];
884 *ascq = stat_table[i][3];
885 goto translate_done;
886 }
887 }
888
889 if (verbose)
890 printk(KERN_WARNING "ata%u: no sense translation for "
891 "status: 0x%02x\n", id, drv_stat);
892
893
894
895 *sk = ABORTED_COMMAND;
896 *asc = 0x00;
897 *ascq = 0x00;
898
899 translate_done:
900 if (verbose)
901 printk(KERN_ERR "ata%u: translated ATA stat/err 0x%02x/%02x "
902 "to SCSI SK/ASC/ASCQ 0x%x/%02x/%02x\n",
903 id, drv_stat, drv_err, *sk, *asc, *ascq);
904 return;
905}
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920static void ata_gen_passthru_sense(struct ata_queued_cmd *qc)
921{
922 struct scsi_cmnd *cmd = qc->scsicmd;
923 struct ata_taskfile *tf = &qc->result_tf;
924 unsigned char *sb = cmd->sense_buffer;
925 unsigned char *desc = sb + 8;
926 int verbose = qc->ap->ops->error_handler == NULL;
927
928 memset(sb, 0, SCSI_SENSE_BUFFERSIZE);
929
930 cmd->result = (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION;
931
932
933
934
935
936 if (qc->err_mask ||
937 tf->command & (ATA_BUSY | ATA_DF | ATA_ERR | ATA_DRQ)) {
938 ata_to_sense_error(qc->ap->print_id, tf->command, tf->feature,
939 &sb[1], &sb[2], &sb[3], verbose);
940 sb[1] &= 0x0f;
941 }
942
943
944
945
946 sb[0] = 0x72;
947
948 desc[0] = 0x09;
949
950
951 sb[7] = 14;
952 desc[1] = 12;
953
954
955
956
957 desc[2] = 0x00;
958 desc[3] = tf->feature;
959 desc[5] = tf->nsect;
960 desc[7] = tf->lbal;
961 desc[9] = tf->lbam;
962 desc[11] = tf->lbah;
963 desc[12] = tf->device;
964 desc[13] = tf->command;
965
966
967
968
969
970 if (tf->flags & ATA_TFLAG_LBA48) {
971 desc[2] |= 0x01;
972 desc[4] = tf->hob_nsect;
973 desc[6] = tf->hob_lbal;
974 desc[8] = tf->hob_lbam;
975 desc[10] = tf->hob_lbah;
976 }
977}
978
979
980
981
982
983
984
985
986
987
988
989static void ata_gen_ata_sense(struct ata_queued_cmd *qc)
990{
991 struct ata_device *dev = qc->dev;
992 struct scsi_cmnd *cmd = qc->scsicmd;
993 struct ata_taskfile *tf = &qc->result_tf;
994 unsigned char *sb = cmd->sense_buffer;
995 unsigned char *desc = sb + 8;
996 int verbose = qc->ap->ops->error_handler == NULL;
997 u64 block;
998
999 memset(sb, 0, SCSI_SENSE_BUFFERSIZE);
1000
1001 cmd->result = (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION;
1002
1003
1004 sb[0] = 0x72;
1005
1006
1007
1008
1009 if (qc->err_mask ||
1010 tf->command & (ATA_BUSY | ATA_DF | ATA_ERR | ATA_DRQ)) {
1011 ata_to_sense_error(qc->ap->print_id, tf->command, tf->feature,
1012 &sb[1], &sb[2], &sb[3], verbose);
1013 sb[1] &= 0x0f;
1014 }
1015
1016 block = ata_tf_read_block(&qc->result_tf, dev);
1017
1018
1019 sb[7] = 12;
1020 desc[0] = 0x00;
1021 desc[1] = 10;
1022
1023 desc[2] |= 0x80;
1024 desc[6] = block >> 40;
1025 desc[7] = block >> 32;
1026 desc[8] = block >> 24;
1027 desc[9] = block >> 16;
1028 desc[10] = block >> 8;
1029 desc[11] = block;
1030}
1031
1032static void ata_scsi_sdev_config(struct scsi_device *sdev)
1033{
1034 sdev->use_10_for_rw = 1;
1035 sdev->use_10_for_ms = 1;
1036
1037
1038
1039
1040
1041
1042 sdev->max_device_blocked = 1;
1043}
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060static int atapi_drain_needed(struct request *rq)
1061{
1062 if (likely(!blk_pc_request(rq)))
1063 return 0;
1064
1065 if (!rq->data_len || (rq->cmd_flags & REQ_RW))
1066 return 0;
1067
1068 return atapi_cmd_type(rq->cmd[0]) == ATAPI_MISC;
1069}
1070
1071static int ata_scsi_dev_config(struct scsi_device *sdev,
1072 struct ata_device *dev)
1073{
1074 if (!ata_id_has_unload(dev->id))
1075 dev->flags |= ATA_DFLAG_NO_UNLOAD;
1076
1077
1078 blk_queue_max_sectors(sdev->request_queue, dev->max_sectors);
1079
1080 if (dev->class == ATA_DEV_ATAPI) {
1081 struct request_queue *q = sdev->request_queue;
1082 void *buf;
1083
1084
1085 blk_queue_update_dma_alignment(sdev->request_queue,
1086 ATA_DMA_PAD_SZ - 1);
1087 blk_queue_update_dma_pad(sdev->request_queue,
1088 ATA_DMA_PAD_SZ - 1);
1089
1090
1091 buf = kmalloc(ATAPI_MAX_DRAIN, q->bounce_gfp | GFP_KERNEL);
1092 if (!buf) {
1093 ata_dev_printk(dev, KERN_ERR,
1094 "drain buffer allocation failed\n");
1095 return -ENOMEM;
1096 }
1097
1098 blk_queue_dma_drain(q, atapi_drain_needed, buf, ATAPI_MAX_DRAIN);
1099 } else {
1100 if (ata_id_is_ssd(dev->id))
1101 queue_flag_set_unlocked(QUEUE_FLAG_NONROT,
1102 sdev->request_queue);
1103
1104
1105 blk_queue_update_dma_alignment(sdev->request_queue,
1106 ATA_SECT_SIZE - 1);
1107 sdev->manage_start_stop = 1;
1108 }
1109
1110 if (dev->flags & ATA_DFLAG_AN)
1111 set_bit(SDEV_EVT_MEDIA_CHANGE, sdev->supported_events);
1112
1113 if (dev->flags & ATA_DFLAG_NCQ) {
1114 int depth;
1115
1116 depth = min(sdev->host->can_queue, ata_id_queue_depth(dev->id));
1117 depth = min(ATA_MAX_QUEUE - 1, depth);
1118 scsi_adjust_queue_depth(sdev, MSG_SIMPLE_TAG, depth);
1119 }
1120
1121 return 0;
1122}
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136int ata_scsi_slave_config(struct scsi_device *sdev)
1137{
1138 struct ata_port *ap = ata_shost_to_port(sdev->host);
1139 struct ata_device *dev = __ata_scsi_find_dev(ap, sdev);
1140 int rc = 0;
1141
1142 ata_scsi_sdev_config(sdev);
1143
1144 if (dev)
1145 rc = ata_scsi_dev_config(sdev, dev);
1146
1147 return rc;
1148}
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164void ata_scsi_slave_destroy(struct scsi_device *sdev)
1165{
1166 struct ata_port *ap = ata_shost_to_port(sdev->host);
1167 struct request_queue *q = sdev->request_queue;
1168 unsigned long flags;
1169 struct ata_device *dev;
1170
1171 if (!ap->ops->error_handler)
1172 return;
1173
1174 spin_lock_irqsave(ap->lock, flags);
1175 dev = __ata_scsi_find_dev(ap, sdev);
1176 if (dev && dev->sdev) {
1177
1178 dev->sdev = NULL;
1179 dev->flags |= ATA_DFLAG_DETACH;
1180 ata_port_schedule_eh(ap);
1181 }
1182 spin_unlock_irqrestore(ap->lock, flags);
1183
1184 kfree(q->dma_drain_buffer);
1185 q->dma_drain_buffer = NULL;
1186 q->dma_drain_size = 0;
1187}
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204int ata_scsi_change_queue_depth(struct scsi_device *sdev, int queue_depth)
1205{
1206 struct ata_port *ap = ata_shost_to_port(sdev->host);
1207 struct ata_device *dev;
1208 unsigned long flags;
1209
1210 if (queue_depth < 1 || queue_depth == sdev->queue_depth)
1211 return sdev->queue_depth;
1212
1213 dev = ata_scsi_find_dev(ap, sdev);
1214 if (!dev || !ata_dev_enabled(dev))
1215 return sdev->queue_depth;
1216
1217
1218 spin_lock_irqsave(ap->lock, flags);
1219 dev->flags &= ~ATA_DFLAG_NCQ_OFF;
1220 if (queue_depth == 1 || !ata_ncq_enabled(dev)) {
1221 dev->flags |= ATA_DFLAG_NCQ_OFF;
1222 queue_depth = 1;
1223 }
1224 spin_unlock_irqrestore(ap->lock, flags);
1225
1226
1227 queue_depth = min(queue_depth, sdev->host->can_queue);
1228 queue_depth = min(queue_depth, ata_id_queue_depth(dev->id));
1229 queue_depth = min(queue_depth, ATA_MAX_QUEUE - 1);
1230
1231 if (sdev->queue_depth == queue_depth)
1232 return -EINVAL;
1233
1234 scsi_adjust_queue_depth(sdev, MSG_SIMPLE_TAG, queue_depth);
1235 return queue_depth;
1236}
1237
1238
1239static void ata_delayed_done_timerfn(unsigned long arg)
1240{
1241 struct scsi_cmnd *scmd = (void *)arg;
1242
1243 scmd->scsi_done(scmd);
1244}
1245
1246
1247static void ata_delayed_done(struct scsi_cmnd *scmd)
1248{
1249 static struct timer_list timer;
1250
1251 setup_timer(&timer, ata_delayed_done_timerfn, (unsigned long)scmd);
1252 mod_timer(&timer, jiffies + 5 * HZ);
1253}
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270static unsigned int ata_scsi_start_stop_xlat(struct ata_queued_cmd *qc)
1271{
1272 struct scsi_cmnd *scmd = qc->scsicmd;
1273 struct ata_taskfile *tf = &qc->tf;
1274 const u8 *cdb = scmd->cmnd;
1275
1276 if (scmd->cmd_len < 5)
1277 goto invalid_fld;
1278
1279 tf->flags |= ATA_TFLAG_DEVICE | ATA_TFLAG_ISADDR;
1280 tf->protocol = ATA_PROT_NODATA;
1281 if (cdb[1] & 0x1) {
1282 ;
1283 }
1284 if (cdb[4] & 0x2)
1285 goto invalid_fld;
1286 if (((cdb[4] >> 4) & 0xf) != 0)
1287 goto invalid_fld;
1288
1289 if (cdb[4] & 0x1) {
1290 tf->nsect = 1;
1291
1292 if (qc->dev->flags & ATA_DFLAG_LBA) {
1293 tf->flags |= ATA_TFLAG_LBA;
1294
1295 tf->lbah = 0x0;
1296 tf->lbam = 0x0;
1297 tf->lbal = 0x0;
1298 tf->device |= ATA_LBA;
1299 } else {
1300
1301 tf->lbal = 0x1;
1302 tf->lbam = 0x0;
1303 tf->lbah = 0x0;
1304 }
1305
1306 tf->command = ATA_CMD_VERIFY;
1307 } else {
1308
1309
1310
1311 if ((qc->ap->flags & ATA_FLAG_NO_POWEROFF_SPINDOWN) &&
1312 system_state == SYSTEM_POWER_OFF)
1313 goto skip;
1314
1315 if ((qc->ap->flags & ATA_FLAG_NO_HIBERNATE_SPINDOWN) &&
1316 system_entering_hibernation())
1317 goto skip;
1318
1319
1320
1321
1322
1323 if ((qc->dev->flags & ATA_DFLAG_SPUNDOWN) &&
1324 (system_state == SYSTEM_HALT ||
1325 system_state == SYSTEM_POWER_OFF)) {
1326 static unsigned long warned;
1327
1328 if (!test_and_set_bit(0, &warned)) {
1329 ata_dev_printk(qc->dev, KERN_WARNING,
1330 "DISK MIGHT NOT BE SPUN DOWN PROPERLY. "
1331 "UPDATE SHUTDOWN UTILITY\n");
1332 ata_dev_printk(qc->dev, KERN_WARNING,
1333 "For more info, visit "
1334 "http://linux-ata.org/shutdown.html\n");
1335
1336
1337
1338
1339 scmd->scsi_done = qc->scsidone;
1340 qc->scsidone = ata_delayed_done;
1341 }
1342 goto skip;
1343 }
1344
1345
1346 tf->command = ATA_CMD_STANDBYNOW1;
1347 }
1348
1349
1350
1351
1352
1353
1354
1355
1356 return 0;
1357
1358 invalid_fld:
1359 ata_scsi_set_sense(scmd, ILLEGAL_REQUEST, 0x24, 0x0);
1360
1361 return 1;
1362 skip:
1363 scmd->result = SAM_STAT_GOOD;
1364 return 1;
1365}
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381static unsigned int ata_scsi_flush_xlat(struct ata_queued_cmd *qc)
1382{
1383 struct ata_taskfile *tf = &qc->tf;
1384
1385 tf->flags |= ATA_TFLAG_DEVICE;
1386 tf->protocol = ATA_PROT_NODATA;
1387
1388 if (qc->dev->flags & ATA_DFLAG_FLUSH_EXT)
1389 tf->command = ATA_CMD_FLUSH_EXT;
1390 else
1391 tf->command = ATA_CMD_FLUSH;
1392
1393
1394 qc->flags |= ATA_QCFLAG_IO;
1395
1396 return 0;
1397}
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409static void scsi_6_lba_len(const u8 *cdb, u64 *plba, u32 *plen)
1410{
1411 u64 lba = 0;
1412 u32 len;
1413
1414 VPRINTK("six-byte command\n");
1415
1416 lba |= ((u64)(cdb[1] & 0x1f)) << 16;
1417 lba |= ((u64)cdb[2]) << 8;
1418 lba |= ((u64)cdb[3]);
1419
1420 len = cdb[4];
1421
1422 *plba = lba;
1423 *plen = len;
1424}
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436static void scsi_10_lba_len(const u8 *cdb, u64 *plba, u32 *plen)
1437{
1438 u64 lba = 0;
1439 u32 len = 0;
1440
1441 VPRINTK("ten-byte command\n");
1442
1443 lba |= ((u64)cdb[2]) << 24;
1444 lba |= ((u64)cdb[3]) << 16;
1445 lba |= ((u64)cdb[4]) << 8;
1446 lba |= ((u64)cdb[5]);
1447
1448 len |= ((u32)cdb[7]) << 8;
1449 len |= ((u32)cdb[8]);
1450
1451 *plba = lba;
1452 *plen = len;
1453}
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465static void scsi_16_lba_len(const u8 *cdb, u64 *plba, u32 *plen)
1466{
1467 u64 lba = 0;
1468 u32 len = 0;
1469
1470 VPRINTK("sixteen-byte command\n");
1471
1472 lba |= ((u64)cdb[2]) << 56;
1473 lba |= ((u64)cdb[3]) << 48;
1474 lba |= ((u64)cdb[4]) << 40;
1475 lba |= ((u64)cdb[5]) << 32;
1476 lba |= ((u64)cdb[6]) << 24;
1477 lba |= ((u64)cdb[7]) << 16;
1478 lba |= ((u64)cdb[8]) << 8;
1479 lba |= ((u64)cdb[9]);
1480
1481 len |= ((u32)cdb[10]) << 24;
1482 len |= ((u32)cdb[11]) << 16;
1483 len |= ((u32)cdb[12]) << 8;
1484 len |= ((u32)cdb[13]);
1485
1486 *plba = lba;
1487 *plen = len;
1488}
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502static unsigned int ata_scsi_verify_xlat(struct ata_queued_cmd *qc)
1503{
1504 struct scsi_cmnd *scmd = qc->scsicmd;
1505 struct ata_taskfile *tf = &qc->tf;
1506 struct ata_device *dev = qc->dev;
1507 u64 dev_sectors = qc->dev->n_sectors;
1508 const u8 *cdb = scmd->cmnd;
1509 u64 block;
1510 u32 n_block;
1511
1512 tf->flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
1513 tf->protocol = ATA_PROT_NODATA;
1514
1515 if (cdb[0] == VERIFY) {
1516 if (scmd->cmd_len < 10)
1517 goto invalid_fld;
1518 scsi_10_lba_len(cdb, &block, &n_block);
1519 } else if (cdb[0] == VERIFY_16) {
1520 if (scmd->cmd_len < 16)
1521 goto invalid_fld;
1522 scsi_16_lba_len(cdb, &block, &n_block);
1523 } else
1524 goto invalid_fld;
1525
1526 if (!n_block)
1527 goto nothing_to_do;
1528 if (block >= dev_sectors)
1529 goto out_of_range;
1530 if ((block + n_block) > dev_sectors)
1531 goto out_of_range;
1532
1533 if (dev->flags & ATA_DFLAG_LBA) {
1534 tf->flags |= ATA_TFLAG_LBA;
1535
1536 if (lba_28_ok(block, n_block)) {
1537
1538 tf->command = ATA_CMD_VERIFY;
1539 tf->device |= (block >> 24) & 0xf;
1540 } else if (lba_48_ok(block, n_block)) {
1541 if (!(dev->flags & ATA_DFLAG_LBA48))
1542 goto out_of_range;
1543
1544
1545 tf->flags |= ATA_TFLAG_LBA48;
1546 tf->command = ATA_CMD_VERIFY_EXT;
1547
1548 tf->hob_nsect = (n_block >> 8) & 0xff;
1549
1550 tf->hob_lbah = (block >> 40) & 0xff;
1551 tf->hob_lbam = (block >> 32) & 0xff;
1552 tf->hob_lbal = (block >> 24) & 0xff;
1553 } else
1554
1555 goto out_of_range;
1556
1557 tf->nsect = n_block & 0xff;
1558
1559 tf->lbah = (block >> 16) & 0xff;
1560 tf->lbam = (block >> 8) & 0xff;
1561 tf->lbal = block & 0xff;
1562
1563 tf->device |= ATA_LBA;
1564 } else {
1565
1566 u32 sect, head, cyl, track;
1567
1568 if (!lba_28_ok(block, n_block))
1569 goto out_of_range;
1570
1571
1572 track = (u32)block / dev->sectors;
1573 cyl = track / dev->heads;
1574 head = track % dev->heads;
1575 sect = (u32)block % dev->sectors + 1;
1576
1577 DPRINTK("block %u track %u cyl %u head %u sect %u\n",
1578 (u32)block, track, cyl, head, sect);
1579
1580
1581
1582
1583
1584 if ((cyl >> 16) || (head >> 4) || (sect >> 8) || (!sect))
1585 goto out_of_range;
1586
1587 tf->command = ATA_CMD_VERIFY;
1588 tf->nsect = n_block & 0xff;
1589 tf->lbal = sect;
1590 tf->lbam = cyl;
1591 tf->lbah = cyl >> 8;
1592 tf->device |= head;
1593 }
1594
1595 return 0;
1596
1597invalid_fld:
1598 ata_scsi_set_sense(scmd, ILLEGAL_REQUEST, 0x24, 0x0);
1599
1600 return 1;
1601
1602out_of_range:
1603 ata_scsi_set_sense(scmd, ILLEGAL_REQUEST, 0x21, 0x0);
1604
1605 return 1;
1606
1607nothing_to_do:
1608 scmd->result = SAM_STAT_GOOD;
1609 return 1;
1610}
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630static unsigned int ata_scsi_rw_xlat(struct ata_queued_cmd *qc)
1631{
1632 struct scsi_cmnd *scmd = qc->scsicmd;
1633 const u8 *cdb = scmd->cmnd;
1634 unsigned int tf_flags = 0;
1635 u64 block;
1636 u32 n_block;
1637 int rc;
1638
1639 if (cdb[0] == WRITE_10 || cdb[0] == WRITE_6 || cdb[0] == WRITE_16)
1640 tf_flags |= ATA_TFLAG_WRITE;
1641
1642
1643 switch (cdb[0]) {
1644 case READ_10:
1645 case WRITE_10:
1646 if (unlikely(scmd->cmd_len < 10))
1647 goto invalid_fld;
1648 scsi_10_lba_len(cdb, &block, &n_block);
1649 if (unlikely(cdb[1] & (1 << 3)))
1650 tf_flags |= ATA_TFLAG_FUA;
1651 break;
1652 case READ_6:
1653 case WRITE_6:
1654 if (unlikely(scmd->cmd_len < 6))
1655 goto invalid_fld;
1656 scsi_6_lba_len(cdb, &block, &n_block);
1657
1658
1659
1660
1661 if (!n_block)
1662 n_block = 256;
1663 break;
1664 case READ_16:
1665 case WRITE_16:
1666 if (unlikely(scmd->cmd_len < 16))
1667 goto invalid_fld;
1668 scsi_16_lba_len(cdb, &block, &n_block);
1669 if (unlikely(cdb[1] & (1 << 3)))
1670 tf_flags |= ATA_TFLAG_FUA;
1671 break;
1672 default:
1673 DPRINTK("no-byte command\n");
1674 goto invalid_fld;
1675 }
1676
1677
1678 if (!n_block)
1679
1680
1681
1682
1683
1684
1685
1686 goto nothing_to_do;
1687
1688 qc->flags |= ATA_QCFLAG_IO;
1689 qc->nbytes = n_block * ATA_SECT_SIZE;
1690
1691 rc = ata_build_rw_tf(&qc->tf, qc->dev, block, n_block, tf_flags,
1692 qc->tag);
1693 if (likely(rc == 0))
1694 return 0;
1695
1696 if (rc == -ERANGE)
1697 goto out_of_range;
1698
1699invalid_fld:
1700 ata_scsi_set_sense(scmd, ILLEGAL_REQUEST, 0x24, 0x0);
1701
1702 return 1;
1703
1704out_of_range:
1705 ata_scsi_set_sense(scmd, ILLEGAL_REQUEST, 0x21, 0x0);
1706
1707 return 1;
1708
1709nothing_to_do:
1710 scmd->result = SAM_STAT_GOOD;
1711 return 1;
1712}
1713
1714static void ata_scsi_qc_complete(struct ata_queued_cmd *qc)
1715{
1716 struct ata_port *ap = qc->ap;
1717 struct scsi_cmnd *cmd = qc->scsicmd;
1718 u8 *cdb = cmd->cmnd;
1719 int need_sense = (qc->err_mask != 0);
1720
1721
1722
1723
1724
1725
1726
1727
1728 if (((cdb[0] == ATA_16) || (cdb[0] == ATA_12)) &&
1729 ((cdb[2] & 0x20) || need_sense)) {
1730 ata_gen_passthru_sense(qc);
1731 } else {
1732 if (!need_sense) {
1733 cmd->result = SAM_STAT_GOOD;
1734 } else {
1735
1736
1737
1738
1739
1740
1741 ata_gen_ata_sense(qc);
1742 }
1743 }
1744
1745
1746 if (unlikely(qc->tf.command == ATA_CMD_STANDBY ||
1747 qc->tf.command == ATA_CMD_STANDBYNOW1))
1748 qc->dev->flags |= ATA_DFLAG_SPUNDOWN;
1749 else if (likely(system_state != SYSTEM_HALT &&
1750 system_state != SYSTEM_POWER_OFF))
1751 qc->dev->flags &= ~ATA_DFLAG_SPUNDOWN;
1752
1753 if (need_sense && !ap->ops->error_handler)
1754 ata_dump_status(ap->print_id, &qc->result_tf);
1755
1756 qc->scsidone(cmd);
1757
1758 ata_qc_free(qc);
1759}
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788static int ata_scsi_translate(struct ata_device *dev, struct scsi_cmnd *cmd,
1789 void (*done)(struct scsi_cmnd *),
1790 ata_xlat_func_t xlat_func)
1791{
1792 struct ata_port *ap = dev->link->ap;
1793 struct ata_queued_cmd *qc;
1794 int rc;
1795
1796 VPRINTK("ENTER\n");
1797
1798 qc = ata_scsi_qc_new(dev, cmd, done);
1799 if (!qc)
1800 goto err_mem;
1801
1802
1803 if (cmd->sc_data_direction == DMA_FROM_DEVICE ||
1804 cmd->sc_data_direction == DMA_TO_DEVICE) {
1805 if (unlikely(scsi_bufflen(cmd) < 1)) {
1806 ata_dev_printk(dev, KERN_WARNING,
1807 "WARNING: zero len r/w req\n");
1808 goto err_did;
1809 }
1810
1811 ata_sg_init(qc, scsi_sglist(cmd), scsi_sg_count(cmd));
1812
1813 qc->dma_dir = cmd->sc_data_direction;
1814 }
1815
1816 qc->complete_fn = ata_scsi_qc_complete;
1817
1818 if (xlat_func(qc))
1819 goto early_finish;
1820
1821 if (ap->ops->qc_defer) {
1822 if ((rc = ap->ops->qc_defer(qc)))
1823 goto defer;
1824 }
1825
1826
1827 ata_qc_issue(qc);
1828
1829 VPRINTK("EXIT\n");
1830 return 0;
1831
1832early_finish:
1833 ata_qc_free(qc);
1834 qc->scsidone(cmd);
1835 DPRINTK("EXIT - early finish (good or error)\n");
1836 return 0;
1837
1838err_did:
1839 ata_qc_free(qc);
1840 cmd->result = (DID_ERROR << 16);
1841 qc->scsidone(cmd);
1842err_mem:
1843 DPRINTK("EXIT - internal\n");
1844 return 0;
1845
1846defer:
1847 ata_qc_free(qc);
1848 DPRINTK("EXIT - defer\n");
1849 if (rc == ATA_DEFER_LINK)
1850 return SCSI_MLQUEUE_DEVICE_BUSY;
1851 else
1852 return SCSI_MLQUEUE_HOST_BUSY;
1853}
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869static void *ata_scsi_rbuf_get(struct scsi_cmnd *cmd, bool copy_in,
1870 unsigned long *flags)
1871{
1872 spin_lock_irqsave(&ata_scsi_rbuf_lock, *flags);
1873
1874 memset(ata_scsi_rbuf, 0, ATA_SCSI_RBUF_SIZE);
1875 if (copy_in)
1876 sg_copy_to_buffer(scsi_sglist(cmd), scsi_sg_count(cmd),
1877 ata_scsi_rbuf, ATA_SCSI_RBUF_SIZE);
1878 return ata_scsi_rbuf;
1879}
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893static inline void ata_scsi_rbuf_put(struct scsi_cmnd *cmd, bool copy_out,
1894 unsigned long *flags)
1895{
1896 if (copy_out)
1897 sg_copy_from_buffer(scsi_sglist(cmd), scsi_sg_count(cmd),
1898 ata_scsi_rbuf, ATA_SCSI_RBUF_SIZE);
1899 spin_unlock_irqrestore(&ata_scsi_rbuf_lock, *flags);
1900}
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917static void ata_scsi_rbuf_fill(struct ata_scsi_args *args,
1918 unsigned int (*actor)(struct ata_scsi_args *args, u8 *rbuf))
1919{
1920 u8 *rbuf;
1921 unsigned int rc;
1922 struct scsi_cmnd *cmd = args->cmd;
1923 unsigned long flags;
1924
1925 rbuf = ata_scsi_rbuf_get(cmd, false, &flags);
1926 rc = actor(args, rbuf);
1927 ata_scsi_rbuf_put(cmd, rc == 0, &flags);
1928
1929 if (rc == 0)
1930 cmd->result = SAM_STAT_GOOD;
1931 args->done(cmd);
1932}
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945static unsigned int ata_scsiop_inq_std(struct ata_scsi_args *args, u8 *rbuf)
1946{
1947 const u8 versions[] = {
1948 0x60,
1949
1950 0x03,
1951 0x20,
1952
1953 0x02,
1954 0x60
1955 };
1956 u8 hdr[] = {
1957 TYPE_DISK,
1958 0,
1959 0x5,
1960 2,
1961 95 - 4
1962 };
1963
1964 VPRINTK("ENTER\n");
1965
1966
1967 if (ata_id_removeable(args->id))
1968 hdr[1] |= (1 << 7);
1969
1970 memcpy(rbuf, hdr, sizeof(hdr));
1971 memcpy(&rbuf[8], "ATA ", 8);
1972 ata_id_string(args->id, &rbuf[16], ATA_ID_PROD, 16);
1973 ata_id_string(args->id, &rbuf[32], ATA_ID_FW_REV, 4);
1974
1975 if (rbuf[32] == 0 || rbuf[32] == ' ')
1976 memcpy(&rbuf[32], "n/a ", 4);
1977
1978 memcpy(rbuf + 59, versions, sizeof(versions));
1979
1980 return 0;
1981}
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993static unsigned int ata_scsiop_inq_00(struct ata_scsi_args *args, u8 *rbuf)
1994{
1995 const u8 pages[] = {
1996 0x00,
1997 0x80,
1998 0x83,
1999 0x89,
2000 0xb1,
2001 };
2002
2003 rbuf[3] = sizeof(pages);
2004 memcpy(rbuf + 4, pages, sizeof(pages));
2005 return 0;
2006}
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018static unsigned int ata_scsiop_inq_80(struct ata_scsi_args *args, u8 *rbuf)
2019{
2020 const u8 hdr[] = {
2021 0,
2022 0x80,
2023 0,
2024 ATA_ID_SERNO_LEN,
2025 };
2026
2027 memcpy(rbuf, hdr, sizeof(hdr));
2028 ata_id_string(args->id, (unsigned char *) &rbuf[4],
2029 ATA_ID_SERNO, ATA_ID_SERNO_LEN);
2030 return 0;
2031}
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046static unsigned int ata_scsiop_inq_83(struct ata_scsi_args *args, u8 *rbuf)
2047{
2048 const int sat_model_serial_desc_len = 68;
2049 int num;
2050
2051 rbuf[1] = 0x83;
2052 num = 4;
2053
2054
2055 rbuf[num + 0] = 2;
2056 rbuf[num + 3] = ATA_ID_SERNO_LEN;
2057 num += 4;
2058 ata_id_string(args->id, (unsigned char *) rbuf + num,
2059 ATA_ID_SERNO, ATA_ID_SERNO_LEN);
2060 num += ATA_ID_SERNO_LEN;
2061
2062
2063
2064 rbuf[num + 0] = 2;
2065 rbuf[num + 1] = 1;
2066 rbuf[num + 3] = sat_model_serial_desc_len;
2067 num += 4;
2068 memcpy(rbuf + num, "ATA ", 8);
2069 num += 8;
2070 ata_id_string(args->id, (unsigned char *) rbuf + num, ATA_ID_PROD,
2071 ATA_ID_PROD_LEN);
2072 num += ATA_ID_PROD_LEN;
2073 ata_id_string(args->id, (unsigned char *) rbuf + num, ATA_ID_SERNO,
2074 ATA_ID_SERNO_LEN);
2075 num += ATA_ID_SERNO_LEN;
2076
2077 rbuf[3] = num - 4;
2078 return 0;
2079}
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091static unsigned int ata_scsiop_inq_89(struct ata_scsi_args *args, u8 *rbuf)
2092{
2093 struct ata_taskfile tf;
2094
2095 memset(&tf, 0, sizeof(tf));
2096
2097 rbuf[1] = 0x89;
2098 rbuf[2] = (0x238 >> 8);
2099 rbuf[3] = (0x238 & 0xff);
2100
2101 memcpy(&rbuf[8], "linux ", 8);
2102 memcpy(&rbuf[16], "libata ", 16);
2103 memcpy(&rbuf[32], DRV_VERSION, 4);
2104 ata_id_string(args->id, &rbuf[32], ATA_ID_FW_REV, 4);
2105
2106
2107
2108 tf.command = ATA_DRDY;
2109 tf.lbal = 0x1;
2110 tf.nsect = 0x1;
2111
2112 ata_tf_to_fis(&tf, 0, 1, &rbuf[36]);
2113 rbuf[36] = 0x34;
2114
2115 rbuf[56] = ATA_CMD_ID_ATA;
2116
2117 memcpy(&rbuf[60], &args->id[0], 512);
2118 return 0;
2119}
2120
2121static unsigned int ata_scsiop_inq_b1(struct ata_scsi_args *args, u8 *rbuf)
2122{
2123 rbuf[1] = 0xb1;
2124 rbuf[3] = 0x3c;
2125 if (ata_id_major_version(args->id) > 7) {
2126 rbuf[4] = args->id[217] >> 8;
2127 rbuf[5] = args->id[217];
2128 rbuf[7] = args->id[168] & 0xf;
2129 }
2130
2131 return 0;
2132}
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145static unsigned int ata_scsiop_noop(struct ata_scsi_args *args, u8 *rbuf)
2146{
2147 VPRINTK("ENTER\n");
2148 return 0;
2149}
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163static unsigned int ata_msense_caching(u16 *id, u8 *buf)
2164{
2165 memcpy(buf, def_cache_mpage, sizeof(def_cache_mpage));
2166 if (ata_id_wcache_enabled(id))
2167 buf[2] |= (1 << 2);
2168 if (!ata_id_rahead_enabled(id))
2169 buf[12] |= (1 << 5);
2170 return sizeof(def_cache_mpage);
2171}
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182static unsigned int ata_msense_ctl_mode(u8 *buf)
2183{
2184 memcpy(buf, def_control_mpage, sizeof(def_control_mpage));
2185 return sizeof(def_control_mpage);
2186}
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197static unsigned int ata_msense_rw_recovery(u8 *buf)
2198{
2199 memcpy(buf, def_rw_recovery_mpage, sizeof(def_rw_recovery_mpage));
2200 return sizeof(def_rw_recovery_mpage);
2201}
2202
2203
2204
2205
2206
2207static int ata_dev_supports_fua(u16 *id)
2208{
2209 unsigned char model[ATA_ID_PROD_LEN + 1], fw[ATA_ID_FW_REV_LEN + 1];
2210
2211 if (!libata_fua)
2212 return 0;
2213 if (!ata_id_has_fua(id))
2214 return 0;
2215
2216 ata_id_c_string(id, model, ATA_ID_PROD, sizeof(model));
2217 ata_id_c_string(id, fw, ATA_ID_FW_REV, sizeof(fw));
2218
2219 if (strcmp(model, "Maxtor"))
2220 return 1;
2221 if (strcmp(fw, "BANC1G10"))
2222 return 1;
2223
2224 return 0;
2225}
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239static unsigned int ata_scsiop_mode_sense(struct ata_scsi_args *args, u8 *rbuf)
2240{
2241 struct ata_device *dev = args->dev;
2242 u8 *scsicmd = args->cmd->cmnd, *p = rbuf;
2243 const u8 sat_blk_desc[] = {
2244 0, 0, 0, 0,
2245 0,
2246 0, 0x2, 0x0
2247 };
2248 u8 pg, spg;
2249 unsigned int ebd, page_control, six_byte;
2250 u8 dpofua;
2251
2252 VPRINTK("ENTER\n");
2253
2254 six_byte = (scsicmd[0] == MODE_SENSE);
2255 ebd = !(scsicmd[1] & 0x8);
2256
2257
2258
2259
2260 page_control = scsicmd[2] >> 6;
2261 switch (page_control) {
2262 case 0:
2263 break;
2264 case 3:
2265 goto saving_not_supp;
2266 case 1:
2267 case 2:
2268 default:
2269 goto invalid_fld;
2270 }
2271
2272 if (six_byte)
2273 p += 4 + (ebd ? 8 : 0);
2274 else
2275 p += 8 + (ebd ? 8 : 0);
2276
2277 pg = scsicmd[2] & 0x3f;
2278 spg = scsicmd[3];
2279
2280
2281
2282
2283 if (spg && (spg != ALL_SUB_MPAGES))
2284 goto invalid_fld;
2285
2286 switch(pg) {
2287 case RW_RECOVERY_MPAGE:
2288 p += ata_msense_rw_recovery(p);
2289 break;
2290
2291 case CACHE_MPAGE:
2292 p += ata_msense_caching(args->id, p);
2293 break;
2294
2295 case CONTROL_MPAGE:
2296 p += ata_msense_ctl_mode(p);
2297 break;
2298
2299 case ALL_MPAGES:
2300 p += ata_msense_rw_recovery(p);
2301 p += ata_msense_caching(args->id, p);
2302 p += ata_msense_ctl_mode(p);
2303 break;
2304
2305 default:
2306 goto invalid_fld;
2307 }
2308
2309 dpofua = 0;
2310 if (ata_dev_supports_fua(args->id) && (dev->flags & ATA_DFLAG_LBA48) &&
2311 (!(dev->flags & ATA_DFLAG_PIO) || dev->multi_count))
2312 dpofua = 1 << 4;
2313
2314 if (six_byte) {
2315 rbuf[0] = p - rbuf - 1;
2316 rbuf[2] |= dpofua;
2317 if (ebd) {
2318 rbuf[3] = sizeof(sat_blk_desc);
2319 memcpy(rbuf + 4, sat_blk_desc, sizeof(sat_blk_desc));
2320 }
2321 } else {
2322 unsigned int output_len = p - rbuf - 2;
2323
2324 rbuf[0] = output_len >> 8;
2325 rbuf[1] = output_len;
2326 rbuf[3] |= dpofua;
2327 if (ebd) {
2328 rbuf[7] = sizeof(sat_blk_desc);
2329 memcpy(rbuf + 8, sat_blk_desc, sizeof(sat_blk_desc));
2330 }
2331 }
2332 return 0;
2333
2334invalid_fld:
2335 ata_scsi_set_sense(args->cmd, ILLEGAL_REQUEST, 0x24, 0x0);
2336
2337 return 1;
2338
2339saving_not_supp:
2340 ata_scsi_set_sense(args->cmd, ILLEGAL_REQUEST, 0x39, 0x0);
2341
2342 return 1;
2343}
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355static unsigned int ata_scsiop_read_cap(struct ata_scsi_args *args, u8 *rbuf)
2356{
2357 u64 last_lba = args->dev->n_sectors - 1;
2358
2359 VPRINTK("ENTER\n");
2360
2361 if (args->cmd->cmnd[0] == READ_CAPACITY) {
2362 if (last_lba >= 0xffffffffULL)
2363 last_lba = 0xffffffff;
2364
2365
2366 rbuf[0] = last_lba >> (8 * 3);
2367 rbuf[1] = last_lba >> (8 * 2);
2368 rbuf[2] = last_lba >> (8 * 1);
2369 rbuf[3] = last_lba;
2370
2371
2372 rbuf[6] = ATA_SECT_SIZE >> 8;
2373 rbuf[7] = ATA_SECT_SIZE & 0xff;
2374 } else {
2375
2376 rbuf[0] = last_lba >> (8 * 7);
2377 rbuf[1] = last_lba >> (8 * 6);
2378 rbuf[2] = last_lba >> (8 * 5);
2379 rbuf[3] = last_lba >> (8 * 4);
2380 rbuf[4] = last_lba >> (8 * 3);
2381 rbuf[5] = last_lba >> (8 * 2);
2382 rbuf[6] = last_lba >> (8 * 1);
2383 rbuf[7] = last_lba;
2384
2385
2386 rbuf[10] = ATA_SECT_SIZE >> 8;
2387 rbuf[11] = ATA_SECT_SIZE & 0xff;
2388 }
2389
2390 return 0;
2391}
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403static unsigned int ata_scsiop_report_luns(struct ata_scsi_args *args, u8 *rbuf)
2404{
2405 VPRINTK("ENTER\n");
2406 rbuf[3] = 8;
2407
2408 return 0;
2409}
2410
2411static void atapi_sense_complete(struct ata_queued_cmd *qc)
2412{
2413 if (qc->err_mask && ((qc->err_mask & AC_ERR_DEV) == 0)) {
2414
2415
2416
2417
2418
2419 ata_gen_passthru_sense(qc);
2420 }
2421
2422 qc->scsidone(qc->scsicmd);
2423 ata_qc_free(qc);
2424}
2425
2426
2427static inline int ata_pio_use_silly(struct ata_port *ap)
2428{
2429 return (ap->flags & ATA_FLAG_PIO_DMA);
2430}
2431
2432static void atapi_request_sense(struct ata_queued_cmd *qc)
2433{
2434 struct ata_port *ap = qc->ap;
2435 struct scsi_cmnd *cmd = qc->scsicmd;
2436
2437 DPRINTK("ATAPI request sense\n");
2438
2439
2440 memset(cmd->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE);
2441
2442#ifdef CONFIG_ATA_SFF
2443 if (ap->ops->sff_tf_read)
2444 ap->ops->sff_tf_read(ap, &qc->tf);
2445#endif
2446
2447
2448 cmd->sense_buffer[0] = 0x70;
2449 cmd->sense_buffer[2] = qc->tf.feature >> 4;
2450
2451 ata_qc_reinit(qc);
2452
2453
2454 sg_init_one(&qc->sgent, cmd->sense_buffer, SCSI_SENSE_BUFFERSIZE);
2455 ata_sg_init(qc, &qc->sgent, 1);
2456 qc->dma_dir = DMA_FROM_DEVICE;
2457
2458 memset(&qc->cdb, 0, qc->dev->cdb_len);
2459 qc->cdb[0] = REQUEST_SENSE;
2460 qc->cdb[4] = SCSI_SENSE_BUFFERSIZE;
2461
2462 qc->tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
2463 qc->tf.command = ATA_CMD_PACKET;
2464
2465 if (ata_pio_use_silly(ap)) {
2466 qc->tf.protocol = ATAPI_PROT_DMA;
2467 qc->tf.feature |= ATAPI_PKT_DMA;
2468 } else {
2469 qc->tf.protocol = ATAPI_PROT_PIO;
2470 qc->tf.lbam = SCSI_SENSE_BUFFERSIZE;
2471 qc->tf.lbah = 0;
2472 }
2473 qc->nbytes = SCSI_SENSE_BUFFERSIZE;
2474
2475 qc->complete_fn = atapi_sense_complete;
2476
2477 ata_qc_issue(qc);
2478
2479 DPRINTK("EXIT\n");
2480}
2481
2482static void atapi_qc_complete(struct ata_queued_cmd *qc)
2483{
2484 struct scsi_cmnd *cmd = qc->scsicmd;
2485 unsigned int err_mask = qc->err_mask;
2486
2487 VPRINTK("ENTER, err_mask 0x%X\n", err_mask);
2488
2489
2490 if (unlikely(qc->ap->ops->error_handler &&
2491 (err_mask || qc->flags & ATA_QCFLAG_SENSE_VALID))) {
2492
2493 if (!(qc->flags & ATA_QCFLAG_SENSE_VALID)) {
2494
2495
2496
2497
2498
2499 ata_gen_passthru_sense(qc);
2500 }
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512 if (qc->cdb[0] == ALLOW_MEDIUM_REMOVAL)
2513 qc->dev->sdev->locked = 0;
2514
2515 qc->scsicmd->result = SAM_STAT_CHECK_CONDITION;
2516 qc->scsidone(cmd);
2517 ata_qc_free(qc);
2518 return;
2519 }
2520
2521
2522 if (unlikely(err_mask & AC_ERR_DEV)) {
2523 cmd->result = SAM_STAT_CHECK_CONDITION;
2524 atapi_request_sense(qc);
2525 return;
2526 } else if (unlikely(err_mask)) {
2527
2528
2529
2530
2531
2532 ata_gen_passthru_sense(qc);
2533 } else {
2534 u8 *scsicmd = cmd->cmnd;
2535
2536 if ((scsicmd[0] == INQUIRY) && ((scsicmd[1] & 0x03) == 0)) {
2537 unsigned long flags;
2538 u8 *buf;
2539
2540 buf = ata_scsi_rbuf_get(cmd, true, &flags);
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550 if (buf[2] == 0) {
2551 buf[2] = 0x5;
2552 buf[3] = 0x32;
2553 }
2554
2555 ata_scsi_rbuf_put(cmd, true, &flags);
2556 }
2557
2558 cmd->result = SAM_STAT_GOOD;
2559 }
2560
2561 qc->scsidone(cmd);
2562 ata_qc_free(qc);
2563}
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574static unsigned int atapi_xlat(struct ata_queued_cmd *qc)
2575{
2576 struct scsi_cmnd *scmd = qc->scsicmd;
2577 struct ata_device *dev = qc->dev;
2578 int nodata = (scmd->sc_data_direction == DMA_NONE);
2579 int using_pio = !nodata && (dev->flags & ATA_DFLAG_PIO);
2580 unsigned int nbytes;
2581
2582 memset(qc->cdb, 0, dev->cdb_len);
2583 memcpy(qc->cdb, scmd->cmnd, scmd->cmd_len);
2584
2585 qc->complete_fn = atapi_qc_complete;
2586
2587 qc->tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
2588 if (scmd->sc_data_direction == DMA_TO_DEVICE) {
2589 qc->tf.flags |= ATA_TFLAG_WRITE;
2590 DPRINTK("direction: write\n");
2591 }
2592
2593 qc->tf.command = ATA_CMD_PACKET;
2594 ata_qc_set_pc_nbytes(qc);
2595
2596
2597 if (!nodata && !using_pio && atapi_check_dma(qc))
2598 using_pio = 1;
2599
2600
2601
2602
2603
2604
2605 nbytes = min(ata_qc_raw_nbytes(qc), (unsigned int)63 * 1024);
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631 if (nbytes & 0x1)
2632 nbytes++;
2633
2634 qc->tf.lbam = (nbytes & 0xFF);
2635 qc->tf.lbah = (nbytes >> 8);
2636
2637 if (nodata)
2638 qc->tf.protocol = ATAPI_PROT_NODATA;
2639 else if (using_pio)
2640 qc->tf.protocol = ATAPI_PROT_PIO;
2641 else {
2642
2643 qc->tf.protocol = ATAPI_PROT_DMA;
2644 qc->tf.feature |= ATAPI_PKT_DMA;
2645
2646 if ((dev->flags & ATA_DFLAG_DMADIR) &&
2647 (scmd->sc_data_direction != DMA_TO_DEVICE))
2648
2649 qc->tf.feature |= ATAPI_DMADIR;
2650 }
2651
2652
2653
2654
2655 return 0;
2656}
2657
2658static struct ata_device *ata_find_dev(struct ata_port *ap, int devno)
2659{
2660 if (!sata_pmp_attached(ap)) {
2661 if (likely(devno < ata_link_max_devices(&ap->link)))
2662 return &ap->link.device[devno];
2663 } else {
2664 if (likely(devno < ap->nr_pmp_links))
2665 return &ap->pmp_link[devno].device[0];
2666 }
2667
2668 return NULL;
2669}
2670
2671static struct ata_device *__ata_scsi_find_dev(struct ata_port *ap,
2672 const struct scsi_device *scsidev)
2673{
2674 int devno;
2675
2676
2677 if (!sata_pmp_attached(ap)) {
2678 if (unlikely(scsidev->channel || scsidev->lun))
2679 return NULL;
2680 devno = scsidev->id;
2681 } else {
2682 if (unlikely(scsidev->id || scsidev->lun))
2683 return NULL;
2684 devno = scsidev->channel;
2685 }
2686
2687 return ata_find_dev(ap, devno);
2688}
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706static struct ata_device *
2707ata_scsi_find_dev(struct ata_port *ap, const struct scsi_device *scsidev)
2708{
2709 struct ata_device *dev = __ata_scsi_find_dev(ap, scsidev);
2710
2711 if (unlikely(!dev || !ata_dev_enabled(dev)))
2712 return NULL;
2713
2714 return dev;
2715}
2716
2717
2718
2719
2720
2721
2722
2723
2724static u8
2725ata_scsi_map_proto(u8 byte1)
2726{
2727 switch((byte1 & 0x1e) >> 1) {
2728 case 3:
2729 return ATA_PROT_NODATA;
2730
2731 case 6:
2732 case 10:
2733 case 11:
2734 return ATA_PROT_DMA;
2735
2736 case 4:
2737 case 5:
2738 return ATA_PROT_PIO;
2739
2740 case 0:
2741 case 1:
2742 case 8:
2743 case 9:
2744 case 7:
2745 case 12:
2746 case 15:
2747 default:
2748 break;
2749 }
2750
2751 return ATA_PROT_UNKNOWN;
2752}
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763static unsigned int ata_scsi_pass_thru(struct ata_queued_cmd *qc)
2764{
2765 struct ata_taskfile *tf = &(qc->tf);
2766 struct scsi_cmnd *scmd = qc->scsicmd;
2767 struct ata_device *dev = qc->dev;
2768 const u8 *cdb = scmd->cmnd;
2769
2770 if ((tf->protocol = ata_scsi_map_proto(cdb[1])) == ATA_PROT_UNKNOWN)
2771 goto invalid_fld;
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788 if (tf->command >= 0x5C && tf->command <= 0x5F && !libata_allow_tpm)
2789 goto invalid_fld;
2790
2791
2792 if (tf->protocol == ATA_PROT_DMA && dev->dma_mode == 0)
2793 goto invalid_fld;
2794
2795
2796
2797
2798
2799 if (cdb[0] == ATA_16) {
2800
2801
2802
2803
2804
2805 if (cdb[1] & 0x01) {
2806 tf->hob_feature = cdb[3];
2807 tf->hob_nsect = cdb[5];
2808 tf->hob_lbal = cdb[7];
2809 tf->hob_lbam = cdb[9];
2810 tf->hob_lbah = cdb[11];
2811 tf->flags |= ATA_TFLAG_LBA48;
2812 } else
2813 tf->flags &= ~ATA_TFLAG_LBA48;
2814
2815
2816
2817
2818 tf->feature = cdb[4];
2819 tf->nsect = cdb[6];
2820 tf->lbal = cdb[8];
2821 tf->lbam = cdb[10];
2822 tf->lbah = cdb[12];
2823 tf->device = cdb[13];
2824 tf->command = cdb[14];
2825 } else {
2826
2827
2828
2829 tf->flags &= ~ATA_TFLAG_LBA48;
2830
2831 tf->feature = cdb[3];
2832 tf->nsect = cdb[4];
2833 tf->lbal = cdb[5];
2834 tf->lbam = cdb[6];
2835 tf->lbah = cdb[7];
2836 tf->device = cdb[8];
2837 tf->command = cdb[9];
2838 }
2839
2840
2841 tf->device = dev->devno ?
2842 tf->device | ATA_DEV1 : tf->device & ~ATA_DEV1;
2843
2844
2845 if ((cdb[1] & 0xe0) && !is_multi_taskfile(tf))
2846 goto invalid_fld;
2847
2848 if (is_multi_taskfile(tf)) {
2849 unsigned int multi_count = 1 << (cdb[1] >> 5);
2850
2851
2852
2853
2854 if (multi_count != dev->multi_count)
2855 ata_dev_printk(dev, KERN_WARNING,
2856 "invalid multi_count %u ignored\n",
2857 multi_count);
2858 }
2859
2860
2861 qc->sect_size = ATA_SECT_SIZE;
2862 switch (tf->command) {
2863 case ATA_CMD_READ_LONG:
2864 case ATA_CMD_READ_LONG_ONCE:
2865 case ATA_CMD_WRITE_LONG:
2866 case ATA_CMD_WRITE_LONG_ONCE:
2867 if (tf->protocol != ATA_PROT_PIO || tf->nsect != 1)
2868 goto invalid_fld;
2869 qc->sect_size = scsi_bufflen(scmd);
2870 }
2871
2872
2873
2874
2875
2876
2877
2878
2879 if ((tf->command == ATA_CMD_SET_FEATURES)
2880 && (tf->feature == SETFEATURES_XFER))
2881 goto invalid_fld;
2882
2883
2884
2885
2886
2887
2888 tf->flags |= (ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE);
2889
2890 if (scmd->sc_data_direction == DMA_TO_DEVICE)
2891 tf->flags |= ATA_TFLAG_WRITE;
2892
2893
2894
2895
2896
2897
2898
2899 ata_qc_set_pc_nbytes(qc);
2900
2901
2902 qc->flags |= ATA_QCFLAG_RESULT_TF | ATA_QCFLAG_QUIET;
2903
2904 return 0;
2905
2906 invalid_fld:
2907 ata_scsi_set_sense(scmd, ILLEGAL_REQUEST, 0x24, 0x00);
2908
2909 return 1;
2910}
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924static inline ata_xlat_func_t ata_get_xlat_func(struct ata_device *dev, u8 cmd)
2925{
2926 switch (cmd) {
2927 case READ_6:
2928 case READ_10:
2929 case READ_16:
2930
2931 case WRITE_6:
2932 case WRITE_10:
2933 case WRITE_16:
2934 return ata_scsi_rw_xlat;
2935
2936 case SYNCHRONIZE_CACHE:
2937 if (ata_try_flush_cache(dev))
2938 return ata_scsi_flush_xlat;
2939 break;
2940
2941 case VERIFY:
2942 case VERIFY_16:
2943 return ata_scsi_verify_xlat;
2944
2945 case ATA_12:
2946 case ATA_16:
2947 return ata_scsi_pass_thru;
2948
2949 case START_STOP:
2950 return ata_scsi_start_stop_xlat;
2951 }
2952
2953 return NULL;
2954}
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964static inline void ata_scsi_dump_cdb(struct ata_port *ap,
2965 struct scsi_cmnd *cmd)
2966{
2967#ifdef ATA_DEBUG
2968 struct scsi_device *scsidev = cmd->device;
2969 u8 *scsicmd = cmd->cmnd;
2970
2971 DPRINTK("CDB (%u:%d,%d,%d) %02x %02x %02x %02x %02x %02x %02x %02x %02x\n",
2972 ap->print_id,
2973 scsidev->channel, scsidev->id, scsidev->lun,
2974 scsicmd[0], scsicmd[1], scsicmd[2], scsicmd[3],
2975 scsicmd[4], scsicmd[5], scsicmd[6], scsicmd[7],
2976 scsicmd[8]);
2977#endif
2978}
2979
2980static inline int __ata_scsi_queuecmd(struct scsi_cmnd *scmd,
2981 void (*done)(struct scsi_cmnd *),
2982 struct ata_device *dev)
2983{
2984 u8 scsi_op = scmd->cmnd[0];
2985 ata_xlat_func_t xlat_func;
2986 int rc = 0;
2987
2988 if (dev->class == ATA_DEV_ATA) {
2989 if (unlikely(!scmd->cmd_len || scmd->cmd_len > dev->cdb_len))
2990 goto bad_cdb_len;
2991
2992 xlat_func = ata_get_xlat_func(dev, scsi_op);
2993 } else {
2994 if (unlikely(!scmd->cmd_len))
2995 goto bad_cdb_len;
2996
2997 xlat_func = NULL;
2998 if (likely((scsi_op != ATA_16) || !atapi_passthru16)) {
2999
3000 int len = COMMAND_SIZE(scsi_op);
3001 if (unlikely(len > scmd->cmd_len || len > dev->cdb_len))
3002 goto bad_cdb_len;
3003
3004 xlat_func = atapi_xlat;
3005 } else {
3006
3007 if (unlikely(scmd->cmd_len > 16))
3008 goto bad_cdb_len;
3009
3010 xlat_func = ata_get_xlat_func(dev, scsi_op);
3011 }
3012 }
3013
3014 if (xlat_func)
3015 rc = ata_scsi_translate(dev, scmd, done, xlat_func);
3016 else
3017 ata_scsi_simulate(dev, scmd, done);
3018
3019 return rc;
3020
3021 bad_cdb_len:
3022 DPRINTK("bad CDB len=%u, scsi_op=0x%02x, max=%u\n",
3023 scmd->cmd_len, scsi_op, dev->cdb_len);
3024 scmd->result = DID_ERROR << 16;
3025 done(scmd);
3026 return 0;
3027}
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048int ata_scsi_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *))
3049{
3050 struct ata_port *ap;
3051 struct ata_device *dev;
3052 struct scsi_device *scsidev = cmd->device;
3053 struct Scsi_Host *shost = scsidev->host;
3054 int rc = 0;
3055
3056 ap = ata_shost_to_port(shost);
3057
3058 spin_unlock(shost->host_lock);
3059 spin_lock(ap->lock);
3060
3061 ata_scsi_dump_cdb(ap, cmd);
3062
3063 dev = ata_scsi_find_dev(ap, scsidev);
3064 if (likely(dev))
3065 rc = __ata_scsi_queuecmd(cmd, done, dev);
3066 else {
3067 cmd->result = (DID_BAD_TARGET << 16);
3068 done(cmd);
3069 }
3070
3071 spin_unlock(ap->lock);
3072 spin_lock(shost->host_lock);
3073 return rc;
3074}
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089void ata_scsi_simulate(struct ata_device *dev, struct scsi_cmnd *cmd,
3090 void (*done)(struct scsi_cmnd *))
3091{
3092 struct ata_scsi_args args;
3093 const u8 *scsicmd = cmd->cmnd;
3094 u8 tmp8;
3095
3096 args.dev = dev;
3097 args.id = dev->id;
3098 args.cmd = cmd;
3099 args.done = done;
3100
3101 switch(scsicmd[0]) {
3102
3103 case FORMAT_UNIT:
3104 ata_scsi_invalid_field(cmd, done);
3105 break;
3106
3107 case INQUIRY:
3108 if (scsicmd[1] & 2)
3109 ata_scsi_invalid_field(cmd, done);
3110 else if ((scsicmd[1] & 1) == 0)
3111 ata_scsi_rbuf_fill(&args, ata_scsiop_inq_std);
3112 else switch (scsicmd[2]) {
3113 case 0x00:
3114 ata_scsi_rbuf_fill(&args, ata_scsiop_inq_00);
3115 break;
3116 case 0x80:
3117 ata_scsi_rbuf_fill(&args, ata_scsiop_inq_80);
3118 break;
3119 case 0x83:
3120 ata_scsi_rbuf_fill(&args, ata_scsiop_inq_83);
3121 break;
3122 case 0x89:
3123 ata_scsi_rbuf_fill(&args, ata_scsiop_inq_89);
3124 break;
3125 case 0xb1:
3126 ata_scsi_rbuf_fill(&args, ata_scsiop_inq_b1);
3127 break;
3128 default:
3129 ata_scsi_invalid_field(cmd, done);
3130 break;
3131 }
3132 break;
3133
3134 case MODE_SENSE:
3135 case MODE_SENSE_10:
3136 ata_scsi_rbuf_fill(&args, ata_scsiop_mode_sense);
3137 break;
3138
3139 case MODE_SELECT:
3140 case MODE_SELECT_10:
3141 ata_scsi_invalid_field(cmd, done);
3142 break;
3143
3144 case READ_CAPACITY:
3145 ata_scsi_rbuf_fill(&args, ata_scsiop_read_cap);
3146 break;
3147
3148 case SERVICE_ACTION_IN:
3149 if ((scsicmd[1] & 0x1f) == SAI_READ_CAPACITY_16)
3150 ata_scsi_rbuf_fill(&args, ata_scsiop_read_cap);
3151 else
3152 ata_scsi_invalid_field(cmd, done);
3153 break;
3154
3155 case REPORT_LUNS:
3156 ata_scsi_rbuf_fill(&args, ata_scsiop_report_luns);
3157 break;
3158
3159 case REQUEST_SENSE:
3160 ata_scsi_set_sense(cmd, 0, 0, 0);
3161 cmd->result = (DRIVER_SENSE << 24);
3162 done(cmd);
3163 break;
3164
3165
3166
3167
3168 case SYNCHRONIZE_CACHE:
3169
3170
3171
3172 case REZERO_UNIT:
3173 case SEEK_6:
3174 case SEEK_10:
3175 case TEST_UNIT_READY:
3176 ata_scsi_rbuf_fill(&args, ata_scsiop_noop);
3177 break;
3178
3179 case SEND_DIAGNOSTIC:
3180 tmp8 = scsicmd[1] & ~(1 << 3);
3181 if ((tmp8 == 0x4) && (!scsicmd[3]) && (!scsicmd[4]))
3182 ata_scsi_rbuf_fill(&args, ata_scsiop_noop);
3183 else
3184 ata_scsi_invalid_field(cmd, done);
3185 break;
3186
3187
3188 default:
3189 ata_scsi_set_sense(cmd, ILLEGAL_REQUEST, 0x20, 0x0);
3190
3191 done(cmd);
3192 break;
3193 }
3194}
3195
3196int ata_scsi_add_hosts(struct ata_host *host, struct scsi_host_template *sht)
3197{
3198 int i, rc;
3199
3200 for (i = 0; i < host->n_ports; i++) {
3201 struct ata_port *ap = host->ports[i];
3202 struct Scsi_Host *shost;
3203
3204 rc = -ENOMEM;
3205 shost = scsi_host_alloc(sht, sizeof(struct ata_port *));
3206 if (!shost)
3207 goto err_alloc;
3208
3209 *(struct ata_port **)&shost->hostdata[0] = ap;
3210 ap->scsi_host = shost;
3211
3212 shost->transportt = &ata_scsi_transport_template;
3213 shost->unique_id = ap->print_id;
3214 shost->max_id = 16;
3215 shost->max_lun = 1;
3216 shost->max_channel = 1;
3217 shost->max_cmd_len = 16;
3218
3219
3220
3221
3222
3223
3224 shost->max_host_blocked = 1;
3225
3226 rc = scsi_add_host(ap->scsi_host, ap->host->dev);
3227 if (rc)
3228 goto err_add;
3229 }
3230
3231 return 0;
3232
3233 err_add:
3234 scsi_host_put(host->ports[i]->scsi_host);
3235 err_alloc:
3236 while (--i >= 0) {
3237 struct Scsi_Host *shost = host->ports[i]->scsi_host;
3238
3239 scsi_remove_host(shost);
3240 scsi_host_put(shost);
3241 }
3242 return rc;
3243}
3244
3245void ata_scsi_scan_host(struct ata_port *ap, int sync)
3246{
3247 int tries = 5;
3248 struct ata_device *last_failed_dev = NULL;
3249 struct ata_link *link;
3250 struct ata_device *dev;
3251
3252 if (ap->flags & ATA_FLAG_DISABLED)
3253 return;
3254
3255 repeat:
3256 ata_for_each_link(link, ap, EDGE) {
3257 ata_for_each_dev(dev, link, ENABLED) {
3258 struct scsi_device *sdev;
3259 int channel = 0, id = 0;
3260
3261 if (dev->sdev)
3262 continue;
3263
3264 if (ata_is_host_link(link))
3265 id = dev->devno;
3266 else
3267 channel = link->pmp;
3268
3269 sdev = __scsi_add_device(ap->scsi_host, channel, id, 0,
3270 NULL);
3271 if (!IS_ERR(sdev)) {
3272 dev->sdev = sdev;
3273 scsi_device_put(sdev);
3274 }
3275 }
3276 }
3277
3278
3279
3280
3281
3282 ata_for_each_link(link, ap, EDGE) {
3283 ata_for_each_dev(dev, link, ENABLED) {
3284 if (!dev->sdev)
3285 goto exit_loop;
3286 }
3287 }
3288 exit_loop:
3289 if (!link)
3290 return;
3291
3292
3293 if (sync) {
3294
3295
3296
3297 if (dev != last_failed_dev) {
3298 msleep(100);
3299 last_failed_dev = dev;
3300 goto repeat;
3301 }
3302
3303
3304
3305
3306 if (--tries) {
3307 msleep(100);
3308 goto repeat;
3309 }
3310
3311 ata_port_printk(ap, KERN_ERR, "WARNING: synchronous SCSI scan "
3312 "failed without making any progress,\n"
3313 " switching to async\n");
3314 }
3315
3316 queue_delayed_work(ata_aux_wq, &ap->hotplug_task,
3317 round_jiffies_relative(HZ));
3318}
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335int ata_scsi_offline_dev(struct ata_device *dev)
3336{
3337 if (dev->sdev) {
3338 scsi_device_set_state(dev->sdev, SDEV_OFFLINE);
3339 return 1;
3340 }
3341 return 0;
3342}
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354static void ata_scsi_remove_dev(struct ata_device *dev)
3355{
3356 struct ata_port *ap = dev->link->ap;
3357 struct scsi_device *sdev;
3358 unsigned long flags;
3359
3360
3361
3362
3363
3364
3365
3366 mutex_lock(&ap->scsi_host->scan_mutex);
3367 spin_lock_irqsave(ap->lock, flags);
3368
3369
3370 sdev = dev->sdev;
3371 dev->sdev = NULL;
3372
3373 if (sdev) {
3374
3375
3376
3377
3378 if (scsi_device_get(sdev) == 0) {
3379
3380
3381
3382
3383
3384 scsi_device_set_state(sdev, SDEV_OFFLINE);
3385 } else {
3386 WARN_ON(1);
3387 sdev = NULL;
3388 }
3389 }
3390
3391 spin_unlock_irqrestore(ap->lock, flags);
3392 mutex_unlock(&ap->scsi_host->scan_mutex);
3393
3394 if (sdev) {
3395 ata_dev_printk(dev, KERN_INFO, "detaching (SCSI %s)\n",
3396 dev_name(&sdev->sdev_gendev));
3397
3398 scsi_remove_device(sdev);
3399 scsi_device_put(sdev);
3400 }
3401}
3402
3403static void ata_scsi_handle_link_detach(struct ata_link *link)
3404{
3405 struct ata_port *ap = link->ap;
3406 struct ata_device *dev;
3407
3408 ata_for_each_dev(dev, link, ALL) {
3409 unsigned long flags;
3410
3411 if (!(dev->flags & ATA_DFLAG_DETACHED))
3412 continue;
3413
3414 spin_lock_irqsave(ap->lock, flags);
3415 dev->flags &= ~ATA_DFLAG_DETACHED;
3416 spin_unlock_irqrestore(ap->lock, flags);
3417
3418 ata_scsi_remove_dev(dev);
3419 }
3420}
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432void ata_scsi_media_change_notify(struct ata_device *dev)
3433{
3434 if (dev->sdev)
3435 sdev_evt_send_simple(dev->sdev, SDEV_EVT_MEDIA_CHANGE,
3436 GFP_ATOMIC);
3437}
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451void ata_scsi_hotplug(struct work_struct *work)
3452{
3453 struct ata_port *ap =
3454 container_of(work, struct ata_port, hotplug_task.work);
3455 int i;
3456
3457 if (ap->pflags & ATA_PFLAG_UNLOADING) {
3458 DPRINTK("ENTER/EXIT - unloading\n");
3459 return;
3460 }
3461
3462 DPRINTK("ENTER\n");
3463
3464
3465
3466
3467
3468 ata_scsi_handle_link_detach(&ap->link);
3469 if (ap->pmp_link)
3470 for (i = 0; i < SATA_PMP_MAX_PORTS; i++)
3471 ata_scsi_handle_link_detach(&ap->pmp_link[i]);
3472
3473
3474 ata_scsi_scan_host(ap, 0);
3475
3476 DPRINTK("EXIT\n");
3477}
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495static int ata_scsi_user_scan(struct Scsi_Host *shost, unsigned int channel,
3496 unsigned int id, unsigned int lun)
3497{
3498 struct ata_port *ap = ata_shost_to_port(shost);
3499 unsigned long flags;
3500 int devno, rc = 0;
3501
3502 if (!ap->ops->error_handler)
3503 return -EOPNOTSUPP;
3504
3505 if (lun != SCAN_WILD_CARD && lun)
3506 return -EINVAL;
3507
3508 if (!sata_pmp_attached(ap)) {
3509 if (channel != SCAN_WILD_CARD && channel)
3510 return -EINVAL;
3511 devno = id;
3512 } else {
3513 if (id != SCAN_WILD_CARD && id)
3514 return -EINVAL;
3515 devno = channel;
3516 }
3517
3518 spin_lock_irqsave(ap->lock, flags);
3519
3520 if (devno == SCAN_WILD_CARD) {
3521 struct ata_link *link;
3522
3523 ata_for_each_link(link, ap, EDGE) {
3524 struct ata_eh_info *ehi = &link->eh_info;
3525 ehi->probe_mask |= ATA_ALL_DEVICES;
3526 ehi->action |= ATA_EH_RESET;
3527 }
3528 } else {
3529 struct ata_device *dev = ata_find_dev(ap, devno);
3530
3531 if (dev) {
3532 struct ata_eh_info *ehi = &dev->link->eh_info;
3533 ehi->probe_mask |= 1 << dev->devno;
3534 ehi->action |= ATA_EH_RESET;
3535 } else
3536 rc = -EINVAL;
3537 }
3538
3539 if (rc == 0) {
3540 ata_port_schedule_eh(ap);
3541 spin_unlock_irqrestore(ap->lock, flags);
3542 ata_port_wait_eh(ap);
3543 } else
3544 spin_unlock_irqrestore(ap->lock, flags);
3545
3546 return rc;
3547}
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561void ata_scsi_dev_rescan(struct work_struct *work)
3562{
3563 struct ata_port *ap =
3564 container_of(work, struct ata_port, scsi_rescan_task);
3565 struct ata_link *link;
3566 struct ata_device *dev;
3567 unsigned long flags;
3568
3569 spin_lock_irqsave(ap->lock, flags);
3570
3571 ata_for_each_link(link, ap, EDGE) {
3572 ata_for_each_dev(dev, link, ENABLED) {
3573 struct scsi_device *sdev = dev->sdev;
3574
3575 if (!sdev)
3576 continue;
3577 if (scsi_device_get(sdev))
3578 continue;
3579
3580 spin_unlock_irqrestore(ap->lock, flags);
3581 scsi_rescan_device(&(sdev->sdev_gendev));
3582 scsi_device_put(sdev);
3583 spin_lock_irqsave(ap->lock, flags);
3584 }
3585 }
3586
3587 spin_unlock_irqrestore(ap->lock, flags);
3588}
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603struct ata_port *ata_sas_port_alloc(struct ata_host *host,
3604 struct ata_port_info *port_info,
3605 struct Scsi_Host *shost)
3606{
3607 struct ata_port *ap;
3608
3609 ap = ata_port_alloc(host);
3610 if (!ap)
3611 return NULL;
3612
3613 ap->port_no = 0;
3614 ap->lock = shost->host_lock;
3615 ap->pio_mask = port_info->pio_mask;
3616 ap->mwdma_mask = port_info->mwdma_mask;
3617 ap->udma_mask = port_info->udma_mask;
3618 ap->flags |= port_info->flags;
3619 ap->ops = port_info->port_ops;
3620 ap->cbl = ATA_CBL_SATA;
3621
3622 return ap;
3623}
3624EXPORT_SYMBOL_GPL(ata_sas_port_alloc);
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638int ata_sas_port_start(struct ata_port *ap)
3639{
3640 return 0;
3641}
3642EXPORT_SYMBOL_GPL(ata_sas_port_start);
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654void ata_sas_port_stop(struct ata_port *ap)
3655{
3656}
3657EXPORT_SYMBOL_GPL(ata_sas_port_stop);
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670int ata_sas_port_init(struct ata_port *ap)
3671{
3672 int rc = ap->ops->port_start(ap);
3673
3674 if (!rc) {
3675 ap->print_id = ata_print_id++;
3676 rc = ata_bus_probe(ap);
3677 }
3678
3679 return rc;
3680}
3681EXPORT_SYMBOL_GPL(ata_sas_port_init);
3682
3683
3684
3685
3686
3687
3688
3689void ata_sas_port_destroy(struct ata_port *ap)
3690{
3691 if (ap->ops->port_stop)
3692 ap->ops->port_stop(ap);
3693 kfree(ap);
3694}
3695EXPORT_SYMBOL_GPL(ata_sas_port_destroy);
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706int ata_sas_slave_configure(struct scsi_device *sdev, struct ata_port *ap)
3707{
3708 ata_scsi_sdev_config(sdev);
3709 ata_scsi_dev_config(sdev, ap->link.device);
3710 return 0;
3711}
3712EXPORT_SYMBOL_GPL(ata_sas_slave_configure);
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725int ata_sas_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *),
3726 struct ata_port *ap)
3727{
3728 int rc = 0;
3729
3730 ata_scsi_dump_cdb(ap, cmd);
3731
3732 if (likely(ata_dev_enabled(ap->link.device)))
3733 rc = __ata_scsi_queuecmd(cmd, done, ap->link.device);
3734 else {
3735 cmd->result = (DID_BAD_TARGET << 16);
3736 done(cmd);
3737 }
3738 return rc;
3739}
3740EXPORT_SYMBOL_GPL(ata_sas_queuecmd);
3741