ASoC: max98926: Constify max98926_reg and max98926_regmap
[cascardo/linux.git] / drivers / scsi / scsi_sysfs.c
1 /*
2  * scsi_sysfs.c
3  *
4  * SCSI sysfs interface routines.
5  *
6  * Created to pull SCSI mid layer sysfs routines into one file.
7  */
8
9 #include <linux/module.h>
10 #include <linux/slab.h>
11 #include <linux/init.h>
12 #include <linux/blkdev.h>
13 #include <linux/device.h>
14 #include <linux/pm_runtime.h>
15
16 #include <scsi/scsi.h>
17 #include <scsi/scsi_device.h>
18 #include <scsi/scsi_host.h>
19 #include <scsi/scsi_tcq.h>
20 #include <scsi/scsi_dh.h>
21 #include <scsi/scsi_transport.h>
22 #include <scsi/scsi_driver.h>
23
24 #include "scsi_priv.h"
25 #include "scsi_logging.h"
26
27 static struct device_type scsi_dev_type;
28
29 static const struct {
30         enum scsi_device_state  value;
31         char                    *name;
32 } sdev_states[] = {
33         { SDEV_CREATED, "created" },
34         { SDEV_RUNNING, "running" },
35         { SDEV_CANCEL, "cancel" },
36         { SDEV_DEL, "deleted" },
37         { SDEV_QUIESCE, "quiesce" },
38         { SDEV_OFFLINE, "offline" },
39         { SDEV_TRANSPORT_OFFLINE, "transport-offline" },
40         { SDEV_BLOCK,   "blocked" },
41         { SDEV_CREATED_BLOCK, "created-blocked" },
42 };
43
44 const char *scsi_device_state_name(enum scsi_device_state state)
45 {
46         int i;
47         char *name = NULL;
48
49         for (i = 0; i < ARRAY_SIZE(sdev_states); i++) {
50                 if (sdev_states[i].value == state) {
51                         name = sdev_states[i].name;
52                         break;
53                 }
54         }
55         return name;
56 }
57
58 static const struct {
59         enum scsi_host_state    value;
60         char                    *name;
61 } shost_states[] = {
62         { SHOST_CREATED, "created" },
63         { SHOST_RUNNING, "running" },
64         { SHOST_CANCEL, "cancel" },
65         { SHOST_DEL, "deleted" },
66         { SHOST_RECOVERY, "recovery" },
67         { SHOST_CANCEL_RECOVERY, "cancel/recovery" },
68         { SHOST_DEL_RECOVERY, "deleted/recovery", },
69 };
70 const char *scsi_host_state_name(enum scsi_host_state state)
71 {
72         int i;
73         char *name = NULL;
74
75         for (i = 0; i < ARRAY_SIZE(shost_states); i++) {
76                 if (shost_states[i].value == state) {
77                         name = shost_states[i].name;
78                         break;
79                 }
80         }
81         return name;
82 }
83
84 static int check_set(unsigned long long *val, char *src)
85 {
86         char *last;
87
88         if (strncmp(src, "-", 20) == 0) {
89                 *val = SCAN_WILD_CARD;
90         } else {
91                 /*
92                  * Doesn't check for int overflow
93                  */
94                 *val = simple_strtoull(src, &last, 0);
95                 if (*last != '\0')
96                         return 1;
97         }
98         return 0;
99 }
100
101 static int scsi_scan(struct Scsi_Host *shost, const char *str)
102 {
103         char s1[15], s2[15], s3[17], junk;
104         unsigned long long channel, id, lun;
105         int res;
106
107         res = sscanf(str, "%10s %10s %16s %c", s1, s2, s3, &junk);
108         if (res != 3)
109                 return -EINVAL;
110         if (check_set(&channel, s1))
111                 return -EINVAL;
112         if (check_set(&id, s2))
113                 return -EINVAL;
114         if (check_set(&lun, s3))
115                 return -EINVAL;
116         if (shost->transportt->user_scan)
117                 res = shost->transportt->user_scan(shost, channel, id, lun);
118         else
119                 res = scsi_scan_host_selected(shost, channel, id, lun, 1);
120         return res;
121 }
122
123 /*
124  * shost_show_function: macro to create an attr function that can be used to
125  * show a non-bit field.
126  */
127 #define shost_show_function(name, field, format_string)                 \
128 static ssize_t                                                          \
129 show_##name (struct device *dev, struct device_attribute *attr,         \
130              char *buf)                                                 \
131 {                                                                       \
132         struct Scsi_Host *shost = class_to_shost(dev);                  \
133         return snprintf (buf, 20, format_string, shost->field);         \
134 }
135
136 /*
137  * shost_rd_attr: macro to create a function and attribute variable for a
138  * read only field.
139  */
140 #define shost_rd_attr2(name, field, format_string)                      \
141         shost_show_function(name, field, format_string)                 \
142 static DEVICE_ATTR(name, S_IRUGO, show_##name, NULL);
143
144 #define shost_rd_attr(field, format_string) \
145 shost_rd_attr2(field, field, format_string)
146
147 /*
148  * Create the actual show/store functions and data structures.
149  */
150
151 static ssize_t
152 store_scan(struct device *dev, struct device_attribute *attr,
153            const char *buf, size_t count)
154 {
155         struct Scsi_Host *shost = class_to_shost(dev);
156         int res;
157
158         res = scsi_scan(shost, buf);
159         if (res == 0)
160                 res = count;
161         return res;
162 };
163 static DEVICE_ATTR(scan, S_IWUSR, NULL, store_scan);
164
165 static ssize_t
166 store_shost_state(struct device *dev, struct device_attribute *attr,
167                   const char *buf, size_t count)
168 {
169         int i;
170         struct Scsi_Host *shost = class_to_shost(dev);
171         enum scsi_host_state state = 0;
172
173         for (i = 0; i < ARRAY_SIZE(shost_states); i++) {
174                 const int len = strlen(shost_states[i].name);
175                 if (strncmp(shost_states[i].name, buf, len) == 0 &&
176                    buf[len] == '\n') {
177                         state = shost_states[i].value;
178                         break;
179                 }
180         }
181         if (!state)
182                 return -EINVAL;
183
184         if (scsi_host_set_state(shost, state))
185                 return -EINVAL;
186         return count;
187 }
188
189 static ssize_t
190 show_shost_state(struct device *dev, struct device_attribute *attr, char *buf)
191 {
192         struct Scsi_Host *shost = class_to_shost(dev);
193         const char *name = scsi_host_state_name(shost->shost_state);
194
195         if (!name)
196                 return -EINVAL;
197
198         return snprintf(buf, 20, "%s\n", name);
199 }
200
201 /* DEVICE_ATTR(state) clashes with dev_attr_state for sdev */
202 struct device_attribute dev_attr_hstate =
203         __ATTR(state, S_IRUGO | S_IWUSR, show_shost_state, store_shost_state);
204
205 static ssize_t
206 show_shost_mode(unsigned int mode, char *buf)
207 {
208         ssize_t len = 0;
209
210         if (mode & MODE_INITIATOR)
211                 len = sprintf(buf, "%s", "Initiator");
212
213         if (mode & MODE_TARGET)
214                 len += sprintf(buf + len, "%s%s", len ? ", " : "", "Target");
215
216         len += sprintf(buf + len, "\n");
217
218         return len;
219 }
220
221 static ssize_t
222 show_shost_supported_mode(struct device *dev, struct device_attribute *attr,
223                           char *buf)
224 {
225         struct Scsi_Host *shost = class_to_shost(dev);
226         unsigned int supported_mode = shost->hostt->supported_mode;
227
228         if (supported_mode == MODE_UNKNOWN)
229                 /* by default this should be initiator */
230                 supported_mode = MODE_INITIATOR;
231
232         return show_shost_mode(supported_mode, buf);
233 }
234
235 static DEVICE_ATTR(supported_mode, S_IRUGO | S_IWUSR, show_shost_supported_mode, NULL);
236
237 static ssize_t
238 show_shost_active_mode(struct device *dev,
239                        struct device_attribute *attr, char *buf)
240 {
241         struct Scsi_Host *shost = class_to_shost(dev);
242
243         if (shost->active_mode == MODE_UNKNOWN)
244                 return snprintf(buf, 20, "unknown\n");
245         else
246                 return show_shost_mode(shost->active_mode, buf);
247 }
248
249 static DEVICE_ATTR(active_mode, S_IRUGO | S_IWUSR, show_shost_active_mode, NULL);
250
251 static int check_reset_type(const char *str)
252 {
253         if (sysfs_streq(str, "adapter"))
254                 return SCSI_ADAPTER_RESET;
255         else if (sysfs_streq(str, "firmware"))
256                 return SCSI_FIRMWARE_RESET;
257         else
258                 return 0;
259 }
260
261 static ssize_t
262 store_host_reset(struct device *dev, struct device_attribute *attr,
263                 const char *buf, size_t count)
264 {
265         struct Scsi_Host *shost = class_to_shost(dev);
266         struct scsi_host_template *sht = shost->hostt;
267         int ret = -EINVAL;
268         int type;
269
270         type = check_reset_type(buf);
271         if (!type)
272                 goto exit_store_host_reset;
273
274         if (sht->host_reset)
275                 ret = sht->host_reset(shost, type);
276
277 exit_store_host_reset:
278         if (ret == 0)
279                 ret = count;
280         return ret;
281 }
282
283 static DEVICE_ATTR(host_reset, S_IWUSR, NULL, store_host_reset);
284
285 static ssize_t
286 show_shost_eh_deadline(struct device *dev,
287                       struct device_attribute *attr, char *buf)
288 {
289         struct Scsi_Host *shost = class_to_shost(dev);
290
291         if (shost->eh_deadline == -1)
292                 return snprintf(buf, strlen("off") + 2, "off\n");
293         return sprintf(buf, "%u\n", shost->eh_deadline / HZ);
294 }
295
296 static ssize_t
297 store_shost_eh_deadline(struct device *dev, struct device_attribute *attr,
298                 const char *buf, size_t count)
299 {
300         struct Scsi_Host *shost = class_to_shost(dev);
301         int ret = -EINVAL;
302         unsigned long deadline, flags;
303
304         if (shost->transportt &&
305             (shost->transportt->eh_strategy_handler ||
306              !shost->hostt->eh_host_reset_handler))
307                 return ret;
308
309         if (!strncmp(buf, "off", strlen("off")))
310                 deadline = -1;
311         else {
312                 ret = kstrtoul(buf, 10, &deadline);
313                 if (ret)
314                         return ret;
315                 if (deadline * HZ > UINT_MAX)
316                         return -EINVAL;
317         }
318
319         spin_lock_irqsave(shost->host_lock, flags);
320         if (scsi_host_in_recovery(shost))
321                 ret = -EBUSY;
322         else {
323                 if (deadline == -1)
324                         shost->eh_deadline = -1;
325                 else
326                         shost->eh_deadline = deadline * HZ;
327
328                 ret = count;
329         }
330         spin_unlock_irqrestore(shost->host_lock, flags);
331
332         return ret;
333 }
334
335 static DEVICE_ATTR(eh_deadline, S_IRUGO | S_IWUSR, show_shost_eh_deadline, store_shost_eh_deadline);
336
337 shost_rd_attr(use_blk_mq, "%d\n");
338 shost_rd_attr(unique_id, "%u\n");
339 shost_rd_attr(cmd_per_lun, "%hd\n");
340 shost_rd_attr(can_queue, "%hd\n");
341 shost_rd_attr(sg_tablesize, "%hu\n");
342 shost_rd_attr(sg_prot_tablesize, "%hu\n");
343 shost_rd_attr(unchecked_isa_dma, "%d\n");
344 shost_rd_attr(prot_capabilities, "%u\n");
345 shost_rd_attr(prot_guard_type, "%hd\n");
346 shost_rd_attr2(proc_name, hostt->proc_name, "%s\n");
347
348 static ssize_t
349 show_host_busy(struct device *dev, struct device_attribute *attr, char *buf)
350 {
351         struct Scsi_Host *shost = class_to_shost(dev);
352         return snprintf(buf, 20, "%d\n", atomic_read(&shost->host_busy));
353 }
354 static DEVICE_ATTR(host_busy, S_IRUGO, show_host_busy, NULL);
355
356 static struct attribute *scsi_sysfs_shost_attrs[] = {
357         &dev_attr_use_blk_mq.attr,
358         &dev_attr_unique_id.attr,
359         &dev_attr_host_busy.attr,
360         &dev_attr_cmd_per_lun.attr,
361         &dev_attr_can_queue.attr,
362         &dev_attr_sg_tablesize.attr,
363         &dev_attr_sg_prot_tablesize.attr,
364         &dev_attr_unchecked_isa_dma.attr,
365         &dev_attr_proc_name.attr,
366         &dev_attr_scan.attr,
367         &dev_attr_hstate.attr,
368         &dev_attr_supported_mode.attr,
369         &dev_attr_active_mode.attr,
370         &dev_attr_prot_capabilities.attr,
371         &dev_attr_prot_guard_type.attr,
372         &dev_attr_host_reset.attr,
373         &dev_attr_eh_deadline.attr,
374         NULL
375 };
376
377 struct attribute_group scsi_shost_attr_group = {
378         .attrs =        scsi_sysfs_shost_attrs,
379 };
380
381 const struct attribute_group *scsi_sysfs_shost_attr_groups[] = {
382         &scsi_shost_attr_group,
383         NULL
384 };
385
386 static void scsi_device_cls_release(struct device *class_dev)
387 {
388         struct scsi_device *sdev;
389
390         sdev = class_to_sdev(class_dev);
391         put_device(&sdev->sdev_gendev);
392 }
393
394 static void scsi_device_dev_release_usercontext(struct work_struct *work)
395 {
396         struct scsi_device *sdev;
397         struct device *parent;
398         struct list_head *this, *tmp;
399         unsigned long flags;
400
401         sdev = container_of(work, struct scsi_device, ew.work);
402
403         scsi_dh_release_device(sdev);
404
405         parent = sdev->sdev_gendev.parent;
406
407         spin_lock_irqsave(sdev->host->host_lock, flags);
408         list_del(&sdev->siblings);
409         list_del(&sdev->same_target_siblings);
410         list_del(&sdev->starved_entry);
411         spin_unlock_irqrestore(sdev->host->host_lock, flags);
412
413         cancel_work_sync(&sdev->event_work);
414
415         list_for_each_safe(this, tmp, &sdev->event_list) {
416                 struct scsi_event *evt;
417
418                 evt = list_entry(this, struct scsi_event, node);
419                 list_del(&evt->node);
420                 kfree(evt);
421         }
422
423         blk_put_queue(sdev->request_queue);
424         /* NULL queue means the device can't be used */
425         sdev->request_queue = NULL;
426
427         kfree(sdev->vpd_pg83);
428         kfree(sdev->vpd_pg80);
429         kfree(sdev->inquiry);
430         kfree(sdev);
431
432         if (parent)
433                 put_device(parent);
434 }
435
436 static void scsi_device_dev_release(struct device *dev)
437 {
438         struct scsi_device *sdp = to_scsi_device(dev);
439         execute_in_process_context(scsi_device_dev_release_usercontext,
440                                    &sdp->ew);
441 }
442
443 static struct class sdev_class = {
444         .name           = "scsi_device",
445         .dev_release    = scsi_device_cls_release,
446 };
447
448 /* all probing is done in the individual ->probe routines */
449 static int scsi_bus_match(struct device *dev, struct device_driver *gendrv)
450 {
451         struct scsi_device *sdp;
452
453         if (dev->type != &scsi_dev_type)
454                 return 0;
455
456         sdp = to_scsi_device(dev);
457         if (sdp->no_uld_attach)
458                 return 0;
459         return (sdp->inq_periph_qual == SCSI_INQ_PQ_CON)? 1: 0;
460 }
461
462 static int scsi_bus_uevent(struct device *dev, struct kobj_uevent_env *env)
463 {
464         struct scsi_device *sdev;
465
466         if (dev->type != &scsi_dev_type)
467                 return 0;
468
469         sdev = to_scsi_device(dev);
470
471         add_uevent_var(env, "MODALIAS=" SCSI_DEVICE_MODALIAS_FMT, sdev->type);
472         return 0;
473 }
474
475 struct bus_type scsi_bus_type = {
476         .name           = "scsi",
477         .match          = scsi_bus_match,
478         .uevent         = scsi_bus_uevent,
479 #ifdef CONFIG_PM
480         .pm             = &scsi_bus_pm_ops,
481 #endif
482 };
483 EXPORT_SYMBOL_GPL(scsi_bus_type);
484
485 int scsi_sysfs_register(void)
486 {
487         int error;
488
489         error = bus_register(&scsi_bus_type);
490         if (!error) {
491                 error = class_register(&sdev_class);
492                 if (error)
493                         bus_unregister(&scsi_bus_type);
494         }
495
496         return error;
497 }
498
499 void scsi_sysfs_unregister(void)
500 {
501         class_unregister(&sdev_class);
502         bus_unregister(&scsi_bus_type);
503 }
504
505 /*
506  * sdev_show_function: macro to create an attr function that can be used to
507  * show a non-bit field.
508  */
509 #define sdev_show_function(field, format_string)                                \
510 static ssize_t                                                          \
511 sdev_show_##field (struct device *dev, struct device_attribute *attr,   \
512                    char *buf)                                           \
513 {                                                                       \
514         struct scsi_device *sdev;                                       \
515         sdev = to_scsi_device(dev);                                     \
516         return snprintf (buf, 20, format_string, sdev->field);          \
517 }                                                                       \
518
519 /*
520  * sdev_rd_attr: macro to create a function and attribute variable for a
521  * read only field.
522  */
523 #define sdev_rd_attr(field, format_string)                              \
524         sdev_show_function(field, format_string)                        \
525 static DEVICE_ATTR(field, S_IRUGO, sdev_show_##field, NULL);
526
527
528 /*
529  * sdev_rw_attr: create a function and attribute variable for a
530  * read/write field.
531  */
532 #define sdev_rw_attr(field, format_string)                              \
533         sdev_show_function(field, format_string)                                \
534                                                                         \
535 static ssize_t                                                          \
536 sdev_store_##field (struct device *dev, struct device_attribute *attr,  \
537                     const char *buf, size_t count)                      \
538 {                                                                       \
539         struct scsi_device *sdev;                                       \
540         sdev = to_scsi_device(dev);                                     \
541         sscanf (buf, format_string, &sdev->field);                      \
542         return count;                                                   \
543 }                                                                       \
544 static DEVICE_ATTR(field, S_IRUGO | S_IWUSR, sdev_show_##field, sdev_store_##field);
545
546 /* Currently we don't export bit fields, but we might in future,
547  * so leave this code in */
548 #if 0
549 /*
550  * sdev_rd_attr: create a function and attribute variable for a
551  * read/write bit field.
552  */
553 #define sdev_rw_attr_bit(field)                                         \
554         sdev_show_function(field, "%d\n")                                       \
555                                                                         \
556 static ssize_t                                                          \
557 sdev_store_##field (struct device *dev, struct device_attribute *attr,  \
558                     const char *buf, size_t count)                      \
559 {                                                                       \
560         int ret;                                                        \
561         struct scsi_device *sdev;                                       \
562         ret = scsi_sdev_check_buf_bit(buf);                             \
563         if (ret >= 0)   {                                               \
564                 sdev = to_scsi_device(dev);                             \
565                 sdev->field = ret;                                      \
566                 ret = count;                                            \
567         }                                                               \
568         return ret;                                                     \
569 }                                                                       \
570 static DEVICE_ATTR(field, S_IRUGO | S_IWUSR, sdev_show_##field, sdev_store_##field);
571
572 /*
573  * scsi_sdev_check_buf_bit: return 0 if buf is "0", return 1 if buf is "1",
574  * else return -EINVAL.
575  */
576 static int scsi_sdev_check_buf_bit(const char *buf)
577 {
578         if ((buf[1] == '\0') || ((buf[1] == '\n') && (buf[2] == '\0'))) {
579                 if (buf[0] == '1')
580                         return 1;
581                 else if (buf[0] == '0')
582                         return 0;
583                 else 
584                         return -EINVAL;
585         } else
586                 return -EINVAL;
587 }
588 #endif
589 /*
590  * Create the actual show/store functions and data structures.
591  */
592 sdev_rd_attr (type, "%d\n");
593 sdev_rd_attr (scsi_level, "%d\n");
594 sdev_rd_attr (vendor, "%.8s\n");
595 sdev_rd_attr (model, "%.16s\n");
596 sdev_rd_attr (rev, "%.4s\n");
597
598 static ssize_t
599 sdev_show_device_busy(struct device *dev, struct device_attribute *attr,
600                 char *buf)
601 {
602         struct scsi_device *sdev = to_scsi_device(dev);
603         return snprintf(buf, 20, "%d\n", atomic_read(&sdev->device_busy));
604 }
605 static DEVICE_ATTR(device_busy, S_IRUGO, sdev_show_device_busy, NULL);
606
607 static ssize_t
608 sdev_show_device_blocked(struct device *dev, struct device_attribute *attr,
609                 char *buf)
610 {
611         struct scsi_device *sdev = to_scsi_device(dev);
612         return snprintf(buf, 20, "%d\n", atomic_read(&sdev->device_blocked));
613 }
614 static DEVICE_ATTR(device_blocked, S_IRUGO, sdev_show_device_blocked, NULL);
615
616 /*
617  * TODO: can we make these symlinks to the block layer ones?
618  */
619 static ssize_t
620 sdev_show_timeout (struct device *dev, struct device_attribute *attr, char *buf)
621 {
622         struct scsi_device *sdev;
623         sdev = to_scsi_device(dev);
624         return snprintf(buf, 20, "%d\n", sdev->request_queue->rq_timeout / HZ);
625 }
626
627 static ssize_t
628 sdev_store_timeout (struct device *dev, struct device_attribute *attr,
629                     const char *buf, size_t count)
630 {
631         struct scsi_device *sdev;
632         int timeout;
633         sdev = to_scsi_device(dev);
634         sscanf (buf, "%d\n", &timeout);
635         blk_queue_rq_timeout(sdev->request_queue, timeout * HZ);
636         return count;
637 }
638 static DEVICE_ATTR(timeout, S_IRUGO | S_IWUSR, sdev_show_timeout, sdev_store_timeout);
639
640 static ssize_t
641 sdev_show_eh_timeout(struct device *dev, struct device_attribute *attr, char *buf)
642 {
643         struct scsi_device *sdev;
644         sdev = to_scsi_device(dev);
645         return snprintf(buf, 20, "%u\n", sdev->eh_timeout / HZ);
646 }
647
648 static ssize_t
649 sdev_store_eh_timeout(struct device *dev, struct device_attribute *attr,
650                     const char *buf, size_t count)
651 {
652         struct scsi_device *sdev;
653         unsigned int eh_timeout;
654         int err;
655
656         if (!capable(CAP_SYS_ADMIN))
657                 return -EACCES;
658
659         sdev = to_scsi_device(dev);
660         err = kstrtouint(buf, 10, &eh_timeout);
661         if (err)
662                 return err;
663         sdev->eh_timeout = eh_timeout * HZ;
664
665         return count;
666 }
667 static DEVICE_ATTR(eh_timeout, S_IRUGO | S_IWUSR, sdev_show_eh_timeout, sdev_store_eh_timeout);
668
669 static ssize_t
670 store_rescan_field (struct device *dev, struct device_attribute *attr,
671                     const char *buf, size_t count)
672 {
673         scsi_rescan_device(dev);
674         return count;
675 }
676 static DEVICE_ATTR(rescan, S_IWUSR, NULL, store_rescan_field);
677
678 static ssize_t
679 sdev_store_delete(struct device *dev, struct device_attribute *attr,
680                   const char *buf, size_t count)
681 {
682         if (device_remove_file_self(dev, attr))
683                 scsi_remove_device(to_scsi_device(dev));
684         return count;
685 };
686 static DEVICE_ATTR(delete, S_IWUSR, NULL, sdev_store_delete);
687
688 static ssize_t
689 store_state_field(struct device *dev, struct device_attribute *attr,
690                   const char *buf, size_t count)
691 {
692         int i;
693         struct scsi_device *sdev = to_scsi_device(dev);
694         enum scsi_device_state state = 0;
695
696         for (i = 0; i < ARRAY_SIZE(sdev_states); i++) {
697                 const int len = strlen(sdev_states[i].name);
698                 if (strncmp(sdev_states[i].name, buf, len) == 0 &&
699                    buf[len] == '\n') {
700                         state = sdev_states[i].value;
701                         break;
702                 }
703         }
704         if (!state)
705                 return -EINVAL;
706
707         if (scsi_device_set_state(sdev, state))
708                 return -EINVAL;
709         return count;
710 }
711
712 static ssize_t
713 show_state_field(struct device *dev, struct device_attribute *attr, char *buf)
714 {
715         struct scsi_device *sdev = to_scsi_device(dev);
716         const char *name = scsi_device_state_name(sdev->sdev_state);
717
718         if (!name)
719                 return -EINVAL;
720
721         return snprintf(buf, 20, "%s\n", name);
722 }
723
724 static DEVICE_ATTR(state, S_IRUGO | S_IWUSR, show_state_field, store_state_field);
725
726 static ssize_t
727 show_queue_type_field(struct device *dev, struct device_attribute *attr,
728                       char *buf)
729 {
730         struct scsi_device *sdev = to_scsi_device(dev);
731         const char *name = "none";
732
733         if (sdev->simple_tags)
734                 name = "simple";
735
736         return snprintf(buf, 20, "%s\n", name);
737 }
738
739 static ssize_t
740 store_queue_type_field(struct device *dev, struct device_attribute *attr,
741                        const char *buf, size_t count)
742 {
743         struct scsi_device *sdev = to_scsi_device(dev);
744
745         if (!sdev->tagged_supported)
746                 return -EINVAL;
747                 
748         sdev_printk(KERN_INFO, sdev,
749                     "ignoring write to deprecated queue_type attribute");
750         return count;
751 }
752
753 static DEVICE_ATTR(queue_type, S_IRUGO | S_IWUSR, show_queue_type_field,
754                    store_queue_type_field);
755
756 #define sdev_vpd_pg_attr(_page)                                         \
757 static ssize_t                                                  \
758 show_vpd_##_page(struct file *filp, struct kobject *kobj,       \
759                  struct bin_attribute *bin_attr,                        \
760                  char *buf, loff_t off, size_t count)                   \
761 {                                                                       \
762         struct device *dev = container_of(kobj, struct device, kobj);   \
763         struct scsi_device *sdev = to_scsi_device(dev);                 \
764         int ret;                                                        \
765         if (!sdev->vpd_##_page)                                         \
766                 return -EINVAL;                                         \
767         rcu_read_lock();                                                \
768         ret = memory_read_from_buffer(buf, count, &off,                 \
769                                       rcu_dereference(sdev->vpd_##_page), \
770                                        sdev->vpd_##_page##_len);        \
771         rcu_read_unlock();                                              \
772         return ret;                                             \
773 }                                                                       \
774 static struct bin_attribute dev_attr_vpd_##_page = {            \
775         .attr = {.name = __stringify(vpd_##_page), .mode = S_IRUGO },   \
776         .size = 0,                                                      \
777         .read = show_vpd_##_page,                                       \
778 };
779
780 sdev_vpd_pg_attr(pg83);
781 sdev_vpd_pg_attr(pg80);
782
783 static ssize_t show_inquiry(struct file *filep, struct kobject *kobj,
784                             struct bin_attribute *bin_attr,
785                             char *buf, loff_t off, size_t count)
786 {
787         struct device *dev = container_of(kobj, struct device, kobj);
788         struct scsi_device *sdev = to_scsi_device(dev);
789
790         if (!sdev->inquiry)
791                 return -EINVAL;
792
793         return memory_read_from_buffer(buf, count, &off, sdev->inquiry,
794                                        sdev->inquiry_len);
795 }
796
797 static struct bin_attribute dev_attr_inquiry = {
798         .attr = {
799                 .name = "inquiry",
800                 .mode = S_IRUGO,
801         },
802         .size = 0,
803         .read = show_inquiry,
804 };
805
806 static ssize_t
807 show_iostat_counterbits(struct device *dev, struct device_attribute *attr,
808                         char *buf)
809 {
810         return snprintf(buf, 20, "%d\n", (int)sizeof(atomic_t) * 8);
811 }
812
813 static DEVICE_ATTR(iocounterbits, S_IRUGO, show_iostat_counterbits, NULL);
814
815 #define show_sdev_iostat(field)                                         \
816 static ssize_t                                                          \
817 show_iostat_##field(struct device *dev, struct device_attribute *attr,  \
818                     char *buf)                                          \
819 {                                                                       \
820         struct scsi_device *sdev = to_scsi_device(dev);                 \
821         unsigned long long count = atomic_read(&sdev->field);           \
822         return snprintf(buf, 20, "0x%llx\n", count);                    \
823 }                                                                       \
824 static DEVICE_ATTR(field, S_IRUGO, show_iostat_##field, NULL)
825
826 show_sdev_iostat(iorequest_cnt);
827 show_sdev_iostat(iodone_cnt);
828 show_sdev_iostat(ioerr_cnt);
829
830 static ssize_t
831 sdev_show_modalias(struct device *dev, struct device_attribute *attr, char *buf)
832 {
833         struct scsi_device *sdev;
834         sdev = to_scsi_device(dev);
835         return snprintf (buf, 20, SCSI_DEVICE_MODALIAS_FMT "\n", sdev->type);
836 }
837 static DEVICE_ATTR(modalias, S_IRUGO, sdev_show_modalias, NULL);
838
839 #define DECLARE_EVT_SHOW(name, Cap_name)                                \
840 static ssize_t                                                          \
841 sdev_show_evt_##name(struct device *dev, struct device_attribute *attr, \
842                      char *buf)                                         \
843 {                                                                       \
844         struct scsi_device *sdev = to_scsi_device(dev);                 \
845         int val = test_bit(SDEV_EVT_##Cap_name, sdev->supported_events);\
846         return snprintf(buf, 20, "%d\n", val);                          \
847 }
848
849 #define DECLARE_EVT_STORE(name, Cap_name)                               \
850 static ssize_t                                                          \
851 sdev_store_evt_##name(struct device *dev, struct device_attribute *attr,\
852                       const char *buf, size_t count)                    \
853 {                                                                       \
854         struct scsi_device *sdev = to_scsi_device(dev);                 \
855         int val = simple_strtoul(buf, NULL, 0);                         \
856         if (val == 0)                                                   \
857                 clear_bit(SDEV_EVT_##Cap_name, sdev->supported_events); \
858         else if (val == 1)                                              \
859                 set_bit(SDEV_EVT_##Cap_name, sdev->supported_events);   \
860         else                                                            \
861                 return -EINVAL;                                         \
862         return count;                                                   \
863 }
864
865 #define DECLARE_EVT(name, Cap_name)                                     \
866         DECLARE_EVT_SHOW(name, Cap_name)                                \
867         DECLARE_EVT_STORE(name, Cap_name)                               \
868         static DEVICE_ATTR(evt_##name, S_IRUGO, sdev_show_evt_##name,   \
869                            sdev_store_evt_##name);
870 #define REF_EVT(name) &dev_attr_evt_##name.attr
871
872 DECLARE_EVT(media_change, MEDIA_CHANGE)
873 DECLARE_EVT(inquiry_change_reported, INQUIRY_CHANGE_REPORTED)
874 DECLARE_EVT(capacity_change_reported, CAPACITY_CHANGE_REPORTED)
875 DECLARE_EVT(soft_threshold_reached, SOFT_THRESHOLD_REACHED_REPORTED)
876 DECLARE_EVT(mode_parameter_change_reported, MODE_PARAMETER_CHANGE_REPORTED)
877 DECLARE_EVT(lun_change_reported, LUN_CHANGE_REPORTED)
878
879 static ssize_t
880 sdev_store_queue_depth(struct device *dev, struct device_attribute *attr,
881                        const char *buf, size_t count)
882 {
883         int depth, retval;
884         struct scsi_device *sdev = to_scsi_device(dev);
885         struct scsi_host_template *sht = sdev->host->hostt;
886
887         if (!sht->change_queue_depth)
888                 return -EINVAL;
889
890         depth = simple_strtoul(buf, NULL, 0);
891
892         if (depth < 1 || depth > sdev->host->can_queue)
893                 return -EINVAL;
894
895         retval = sht->change_queue_depth(sdev, depth);
896         if (retval < 0)
897                 return retval;
898
899         sdev->max_queue_depth = sdev->queue_depth;
900
901         return count;
902 }
903 sdev_show_function(queue_depth, "%d\n");
904
905 static DEVICE_ATTR(queue_depth, S_IRUGO | S_IWUSR, sdev_show_queue_depth,
906                    sdev_store_queue_depth);
907
908 static ssize_t
909 sdev_show_wwid(struct device *dev, struct device_attribute *attr,
910                     char *buf)
911 {
912         struct scsi_device *sdev = to_scsi_device(dev);
913         ssize_t count;
914
915         count = scsi_vpd_lun_id(sdev, buf, PAGE_SIZE);
916         if (count > 0) {
917                 buf[count] = '\n';
918                 count++;
919         }
920         return count;
921 }
922 static DEVICE_ATTR(wwid, S_IRUGO, sdev_show_wwid, NULL);
923
924 #ifdef CONFIG_SCSI_DH
925 static ssize_t
926 sdev_show_dh_state(struct device *dev, struct device_attribute *attr,
927                    char *buf)
928 {
929         struct scsi_device *sdev = to_scsi_device(dev);
930
931         if (!sdev->handler)
932                 return snprintf(buf, 20, "detached\n");
933
934         return snprintf(buf, 20, "%s\n", sdev->handler->name);
935 }
936
937 static ssize_t
938 sdev_store_dh_state(struct device *dev, struct device_attribute *attr,
939                     const char *buf, size_t count)
940 {
941         struct scsi_device *sdev = to_scsi_device(dev);
942         int err = -EINVAL;
943
944         if (sdev->sdev_state == SDEV_CANCEL ||
945             sdev->sdev_state == SDEV_DEL)
946                 return -ENODEV;
947
948         if (!sdev->handler) {
949                 /*
950                  * Attach to a device handler
951                  */
952                 err = scsi_dh_attach(sdev->request_queue, buf);
953         } else if (!strncmp(buf, "activate", 8)) {
954                 /*
955                  * Activate a device handler
956                  */
957                 if (sdev->handler->activate)
958                         err = sdev->handler->activate(sdev, NULL, NULL);
959                 else
960                         err = 0;
961         } else if (!strncmp(buf, "detach", 6)) {
962                 /*
963                  * Detach from a device handler
964                  */
965                 sdev_printk(KERN_WARNING, sdev,
966                             "can't detach handler %s.\n",
967                             sdev->handler->name);
968                 err = -EINVAL;
969         }
970
971         return err < 0 ? err : count;
972 }
973
974 static DEVICE_ATTR(dh_state, S_IRUGO | S_IWUSR, sdev_show_dh_state,
975                    sdev_store_dh_state);
976 #endif
977
978 static ssize_t
979 sdev_show_queue_ramp_up_period(struct device *dev,
980                                struct device_attribute *attr,
981                                char *buf)
982 {
983         struct scsi_device *sdev;
984         sdev = to_scsi_device(dev);
985         return snprintf(buf, 20, "%u\n",
986                         jiffies_to_msecs(sdev->queue_ramp_up_period));
987 }
988
989 static ssize_t
990 sdev_store_queue_ramp_up_period(struct device *dev,
991                                 struct device_attribute *attr,
992                                 const char *buf, size_t count)
993 {
994         struct scsi_device *sdev = to_scsi_device(dev);
995         unsigned int period;
996
997         if (kstrtouint(buf, 10, &period))
998                 return -EINVAL;
999
1000         sdev->queue_ramp_up_period = msecs_to_jiffies(period);
1001         return count;
1002 }
1003
1004 static DEVICE_ATTR(queue_ramp_up_period, S_IRUGO | S_IWUSR,
1005                    sdev_show_queue_ramp_up_period,
1006                    sdev_store_queue_ramp_up_period);
1007
1008 static umode_t scsi_sdev_attr_is_visible(struct kobject *kobj,
1009                                          struct attribute *attr, int i)
1010 {
1011         struct device *dev = container_of(kobj, struct device, kobj);
1012         struct scsi_device *sdev = to_scsi_device(dev);
1013
1014
1015         if (attr == &dev_attr_queue_depth.attr &&
1016             !sdev->host->hostt->change_queue_depth)
1017                 return S_IRUGO;
1018
1019         if (attr == &dev_attr_queue_ramp_up_period.attr &&
1020             !sdev->host->hostt->change_queue_depth)
1021                 return 0;
1022
1023         return attr->mode;
1024 }
1025
1026 /* Default template for device attributes.  May NOT be modified */
1027 static struct attribute *scsi_sdev_attrs[] = {
1028         &dev_attr_device_blocked.attr,
1029         &dev_attr_type.attr,
1030         &dev_attr_scsi_level.attr,
1031         &dev_attr_device_busy.attr,
1032         &dev_attr_vendor.attr,
1033         &dev_attr_model.attr,
1034         &dev_attr_rev.attr,
1035         &dev_attr_rescan.attr,
1036         &dev_attr_delete.attr,
1037         &dev_attr_state.attr,
1038         &dev_attr_timeout.attr,
1039         &dev_attr_eh_timeout.attr,
1040         &dev_attr_iocounterbits.attr,
1041         &dev_attr_iorequest_cnt.attr,
1042         &dev_attr_iodone_cnt.attr,
1043         &dev_attr_ioerr_cnt.attr,
1044         &dev_attr_modalias.attr,
1045         &dev_attr_queue_depth.attr,
1046         &dev_attr_queue_type.attr,
1047         &dev_attr_wwid.attr,
1048 #ifdef CONFIG_SCSI_DH
1049         &dev_attr_dh_state.attr,
1050 #endif
1051         &dev_attr_queue_ramp_up_period.attr,
1052         REF_EVT(media_change),
1053         REF_EVT(inquiry_change_reported),
1054         REF_EVT(capacity_change_reported),
1055         REF_EVT(soft_threshold_reached),
1056         REF_EVT(mode_parameter_change_reported),
1057         REF_EVT(lun_change_reported),
1058         NULL
1059 };
1060
1061 static struct bin_attribute *scsi_sdev_bin_attrs[] = {
1062         &dev_attr_vpd_pg83,
1063         &dev_attr_vpd_pg80,
1064         &dev_attr_inquiry,
1065         NULL
1066 };
1067 static struct attribute_group scsi_sdev_attr_group = {
1068         .attrs =        scsi_sdev_attrs,
1069         .bin_attrs =    scsi_sdev_bin_attrs,
1070         .is_visible =   scsi_sdev_attr_is_visible,
1071 };
1072
1073 static const struct attribute_group *scsi_sdev_attr_groups[] = {
1074         &scsi_sdev_attr_group,
1075         NULL
1076 };
1077
1078 static int scsi_target_add(struct scsi_target *starget)
1079 {
1080         int error;
1081
1082         if (starget->state != STARGET_CREATED)
1083                 return 0;
1084
1085         error = device_add(&starget->dev);
1086         if (error) {
1087                 dev_err(&starget->dev, "target device_add failed, error %d\n", error);
1088                 return error;
1089         }
1090         transport_add_device(&starget->dev);
1091         starget->state = STARGET_RUNNING;
1092
1093         pm_runtime_set_active(&starget->dev);
1094         pm_runtime_enable(&starget->dev);
1095         device_enable_async_suspend(&starget->dev);
1096
1097         return 0;
1098 }
1099
1100 /**
1101  * scsi_sysfs_add_sdev - add scsi device to sysfs
1102  * @sdev:       scsi_device to add
1103  *
1104  * Return value:
1105  *      0 on Success / non-zero on Failure
1106  **/
1107 int scsi_sysfs_add_sdev(struct scsi_device *sdev)
1108 {
1109         int error, i;
1110         struct request_queue *rq = sdev->request_queue;
1111         struct scsi_target *starget = sdev->sdev_target;
1112
1113         error = scsi_device_set_state(sdev, SDEV_RUNNING);
1114         if (error)
1115                 return error;
1116
1117         error = scsi_target_add(starget);
1118         if (error)
1119                 return error;
1120
1121         transport_configure_device(&starget->dev);
1122
1123         device_enable_async_suspend(&sdev->sdev_gendev);
1124         scsi_autopm_get_target(starget);
1125         pm_runtime_set_active(&sdev->sdev_gendev);
1126         pm_runtime_forbid(&sdev->sdev_gendev);
1127         pm_runtime_enable(&sdev->sdev_gendev);
1128         scsi_autopm_put_target(starget);
1129
1130         scsi_autopm_get_device(sdev);
1131
1132         error = device_add(&sdev->sdev_gendev);
1133         if (error) {
1134                 sdev_printk(KERN_INFO, sdev,
1135                                 "failed to add device: %d\n", error);
1136                 return error;
1137         }
1138
1139         error = scsi_dh_add_device(sdev);
1140         if (error)
1141                 /*
1142                  * device_handler is optional, so any error can be ignored
1143                  */
1144                 sdev_printk(KERN_INFO, sdev,
1145                                 "failed to add device handler: %d\n", error);
1146
1147         device_enable_async_suspend(&sdev->sdev_dev);
1148         error = device_add(&sdev->sdev_dev);
1149         if (error) {
1150                 sdev_printk(KERN_INFO, sdev,
1151                                 "failed to add class device: %d\n", error);
1152                 scsi_dh_remove_device(sdev);
1153                 device_del(&sdev->sdev_gendev);
1154                 return error;
1155         }
1156         transport_add_device(&sdev->sdev_gendev);
1157         sdev->is_visible = 1;
1158
1159         error = bsg_register_queue(rq, &sdev->sdev_gendev, NULL, NULL);
1160
1161         if (error)
1162                 /* we're treating error on bsg register as non-fatal,
1163                  * so pretend nothing went wrong */
1164                 sdev_printk(KERN_INFO, sdev,
1165                             "Failed to register bsg queue, errno=%d\n", error);
1166
1167         /* add additional host specific attributes */
1168         if (sdev->host->hostt->sdev_attrs) {
1169                 for (i = 0; sdev->host->hostt->sdev_attrs[i]; i++) {
1170                         error = device_create_file(&sdev->sdev_gendev,
1171                                         sdev->host->hostt->sdev_attrs[i]);
1172                         if (error)
1173                                 return error;
1174                 }
1175         }
1176
1177         scsi_autopm_put_device(sdev);
1178         return error;
1179 }
1180
1181 void __scsi_remove_device(struct scsi_device *sdev)
1182 {
1183         struct device *dev = &sdev->sdev_gendev;
1184
1185         /*
1186          * This cleanup path is not reentrant and while it is impossible
1187          * to get a new reference with scsi_device_get() someone can still
1188          * hold a previously acquired one.
1189          */
1190         if (sdev->sdev_state == SDEV_DEL)
1191                 return;
1192
1193         if (sdev->is_visible) {
1194                 if (scsi_device_set_state(sdev, SDEV_CANCEL) != 0)
1195                         return;
1196
1197                 bsg_unregister_queue(sdev->request_queue);
1198                 device_unregister(&sdev->sdev_dev);
1199                 transport_remove_device(dev);
1200                 scsi_dh_remove_device(sdev);
1201                 device_del(dev);
1202         } else
1203                 put_device(&sdev->sdev_dev);
1204
1205         /*
1206          * Stop accepting new requests and wait until all queuecommand() and
1207          * scsi_run_queue() invocations have finished before tearing down the
1208          * device.
1209          */
1210         scsi_device_set_state(sdev, SDEV_DEL);
1211         blk_cleanup_queue(sdev->request_queue);
1212         cancel_work_sync(&sdev->requeue_work);
1213
1214         if (sdev->host->hostt->slave_destroy)
1215                 sdev->host->hostt->slave_destroy(sdev);
1216         transport_destroy_device(dev);
1217
1218         /*
1219          * Paired with the kref_get() in scsi_sysfs_initialize().  We have
1220          * remoed sysfs visibility from the device, so make the target
1221          * invisible if this was the last device underneath it.
1222          */
1223         scsi_target_reap(scsi_target(sdev));
1224
1225         put_device(dev);
1226 }
1227
1228 /**
1229  * scsi_remove_device - unregister a device from the scsi bus
1230  * @sdev:       scsi_device to unregister
1231  **/
1232 void scsi_remove_device(struct scsi_device *sdev)
1233 {
1234         struct Scsi_Host *shost = sdev->host;
1235
1236         mutex_lock(&shost->scan_mutex);
1237         __scsi_remove_device(sdev);
1238         mutex_unlock(&shost->scan_mutex);
1239 }
1240 EXPORT_SYMBOL(scsi_remove_device);
1241
1242 static void __scsi_remove_target(struct scsi_target *starget)
1243 {
1244         struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);
1245         unsigned long flags;
1246         struct scsi_device *sdev;
1247
1248         spin_lock_irqsave(shost->host_lock, flags);
1249  restart:
1250         list_for_each_entry(sdev, &shost->__devices, siblings) {
1251                 if (sdev->channel != starget->channel ||
1252                     sdev->id != starget->id ||
1253                     scsi_device_get(sdev))
1254                         continue;
1255                 spin_unlock_irqrestore(shost->host_lock, flags);
1256                 scsi_remove_device(sdev);
1257                 scsi_device_put(sdev);
1258                 spin_lock_irqsave(shost->host_lock, flags);
1259                 goto restart;
1260         }
1261         spin_unlock_irqrestore(shost->host_lock, flags);
1262 }
1263
1264 /**
1265  * scsi_remove_target - try to remove a target and all its devices
1266  * @dev: generic starget or parent of generic stargets to be removed
1267  *
1268  * Note: This is slightly racy.  It is possible that if the user
1269  * requests the addition of another device then the target won't be
1270  * removed.
1271  */
1272 void scsi_remove_target(struct device *dev)
1273 {
1274         struct Scsi_Host *shost = dev_to_shost(dev->parent);
1275         struct scsi_target *starget;
1276         unsigned long flags;
1277
1278 restart:
1279         spin_lock_irqsave(shost->host_lock, flags);
1280         list_for_each_entry(starget, &shost->__targets, siblings) {
1281                 if (starget->state == STARGET_DEL)
1282                         continue;
1283                 if (starget->dev.parent == dev || &starget->dev == dev) {
1284                         kref_get(&starget->reap_ref);
1285                         spin_unlock_irqrestore(shost->host_lock, flags);
1286                         __scsi_remove_target(starget);
1287                         scsi_target_reap(starget);
1288                         goto restart;
1289                 }
1290         }
1291         spin_unlock_irqrestore(shost->host_lock, flags);
1292 }
1293 EXPORT_SYMBOL(scsi_remove_target);
1294
1295 int scsi_register_driver(struct device_driver *drv)
1296 {
1297         drv->bus = &scsi_bus_type;
1298
1299         return driver_register(drv);
1300 }
1301 EXPORT_SYMBOL(scsi_register_driver);
1302
1303 int scsi_register_interface(struct class_interface *intf)
1304 {
1305         intf->class = &sdev_class;
1306
1307         return class_interface_register(intf);
1308 }
1309 EXPORT_SYMBOL(scsi_register_interface);
1310
1311 /**
1312  * scsi_sysfs_add_host - add scsi host to subsystem
1313  * @shost:     scsi host struct to add to subsystem
1314  **/
1315 int scsi_sysfs_add_host(struct Scsi_Host *shost)
1316 {
1317         int error, i;
1318
1319         /* add host specific attributes */
1320         if (shost->hostt->shost_attrs) {
1321                 for (i = 0; shost->hostt->shost_attrs[i]; i++) {
1322                         error = device_create_file(&shost->shost_dev,
1323                                         shost->hostt->shost_attrs[i]);
1324                         if (error)
1325                                 return error;
1326                 }
1327         }
1328
1329         transport_register_device(&shost->shost_gendev);
1330         transport_configure_device(&shost->shost_gendev);
1331         return 0;
1332 }
1333
1334 static struct device_type scsi_dev_type = {
1335         .name =         "scsi_device",
1336         .release =      scsi_device_dev_release,
1337         .groups =       scsi_sdev_attr_groups,
1338 };
1339
1340 void scsi_sysfs_device_initialize(struct scsi_device *sdev)
1341 {
1342         unsigned long flags;
1343         struct Scsi_Host *shost = sdev->host;
1344         struct scsi_target  *starget = sdev->sdev_target;
1345
1346         device_initialize(&sdev->sdev_gendev);
1347         sdev->sdev_gendev.bus = &scsi_bus_type;
1348         sdev->sdev_gendev.type = &scsi_dev_type;
1349         dev_set_name(&sdev->sdev_gendev, "%d:%d:%d:%llu",
1350                      sdev->host->host_no, sdev->channel, sdev->id, sdev->lun);
1351
1352         device_initialize(&sdev->sdev_dev);
1353         sdev->sdev_dev.parent = get_device(&sdev->sdev_gendev);
1354         sdev->sdev_dev.class = &sdev_class;
1355         dev_set_name(&sdev->sdev_dev, "%d:%d:%d:%llu",
1356                      sdev->host->host_no, sdev->channel, sdev->id, sdev->lun);
1357         /*
1358          * Get a default scsi_level from the target (derived from sibling
1359          * devices).  This is the best we can do for guessing how to set
1360          * sdev->lun_in_cdb for the initial INQUIRY command.  For LUN 0 the
1361          * setting doesn't matter, because all the bits are zero anyway.
1362          * But it does matter for higher LUNs.
1363          */
1364         sdev->scsi_level = starget->scsi_level;
1365         if (sdev->scsi_level <= SCSI_2 &&
1366                         sdev->scsi_level != SCSI_UNKNOWN &&
1367                         !shost->no_scsi2_lun_in_cdb)
1368                 sdev->lun_in_cdb = 1;
1369
1370         transport_setup_device(&sdev->sdev_gendev);
1371         spin_lock_irqsave(shost->host_lock, flags);
1372         list_add_tail(&sdev->same_target_siblings, &starget->devices);
1373         list_add_tail(&sdev->siblings, &shost->__devices);
1374         spin_unlock_irqrestore(shost->host_lock, flags);
1375         /*
1376          * device can now only be removed via __scsi_remove_device() so hold
1377          * the target.  Target will be held in CREATED state until something
1378          * beneath it becomes visible (in which case it moves to RUNNING)
1379          */
1380         kref_get(&starget->reap_ref);
1381 }
1382
1383 int scsi_is_sdev_device(const struct device *dev)
1384 {
1385         return dev->type == &scsi_dev_type;
1386 }
1387 EXPORT_SYMBOL(scsi_is_sdev_device);
1388
1389 /* A blank transport template that is used in drivers that don't
1390  * yet implement Transport Attributes */
1391 struct scsi_transport_template blank_transport_template = { { { {NULL, }, }, }, };