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