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