diff options
-rw-r--r-- | drivers/scsi/osst.c | 1 | ||||
-rw-r--r-- | drivers/scsi/scsi_sysfs.c | 23 | ||||
-rw-r--r-- | drivers/scsi/sd.c | 3 | ||||
-rw-r--r-- | drivers/scsi/sr.c | 2 | ||||
-rw-r--r-- | drivers/scsi/st.c | 1 | ||||
-rw-r--r-- | include/scsi/scsi.h | 1 | ||||
-rw-r--r-- | include/scsi/scsi_device.h | 5 |
7 files changed, 36 insertions, 0 deletions
diff --git a/drivers/scsi/osst.c b/drivers/scsi/osst.c index a967fadb7439..08060fb478b6 100644 --- a/drivers/scsi/osst.c +++ b/drivers/scsi/osst.c | |||
@@ -87,6 +87,7 @@ MODULE_AUTHOR("Willem Riede"); | |||
87 | MODULE_DESCRIPTION("OnStream {DI-|FW-|SC-|USB}{30|50} Tape Driver"); | 87 | MODULE_DESCRIPTION("OnStream {DI-|FW-|SC-|USB}{30|50} Tape Driver"); |
88 | MODULE_LICENSE("GPL"); | 88 | MODULE_LICENSE("GPL"); |
89 | MODULE_ALIAS_CHARDEV_MAJOR(OSST_MAJOR); | 89 | MODULE_ALIAS_CHARDEV_MAJOR(OSST_MAJOR); |
90 | MODULE_ALIAS_SCSI_DEVICE(TYPE_TAPE); | ||
90 | 91 | ||
91 | module_param(max_dev, int, 0444); | 92 | module_param(max_dev, int, 0444); |
92 | MODULE_PARM_DESC(max_dev, "Maximum number of OnStream Tape Drives to attach (4)"); | 93 | MODULE_PARM_DESC(max_dev, "Maximum number of OnStream Tape Drives to attach (4)"); |
diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c index 96db51c40ef3..5326f5cbeae9 100644 --- a/drivers/scsi/scsi_sysfs.c +++ b/drivers/scsi/scsi_sysfs.c | |||
@@ -276,6 +276,19 @@ static int scsi_bus_match(struct device *dev, struct device_driver *gendrv) | |||
276 | return (sdp->inq_periph_qual == SCSI_INQ_PQ_CON)? 1: 0; | 276 | return (sdp->inq_periph_qual == SCSI_INQ_PQ_CON)? 1: 0; |
277 | } | 277 | } |
278 | 278 | ||
279 | static int scsi_bus_uevent(struct device *dev, char **envp, int num_envp, | ||
280 | char *buffer, int buffer_size) | ||
281 | { | ||
282 | struct scsi_device *sdev = to_scsi_device(dev); | ||
283 | int i = 0; | ||
284 | int length = 0; | ||
285 | |||
286 | add_uevent_var(envp, num_envp, &i, buffer, buffer_size, &length, | ||
287 | "MODALIAS=" SCSI_DEVICE_MODALIAS_FMT, sdev->type); | ||
288 | envp[i] = NULL; | ||
289 | return 0; | ||
290 | } | ||
291 | |||
279 | static int scsi_bus_suspend(struct device * dev, pm_message_t state) | 292 | static int scsi_bus_suspend(struct device * dev, pm_message_t state) |
280 | { | 293 | { |
281 | struct device_driver *drv = dev->driver; | 294 | struct device_driver *drv = dev->driver; |
@@ -331,6 +344,7 @@ static int scsi_bus_resume(struct device * dev) | |||
331 | struct bus_type scsi_bus_type = { | 344 | struct bus_type scsi_bus_type = { |
332 | .name = "scsi", | 345 | .name = "scsi", |
333 | .match = scsi_bus_match, | 346 | .match = scsi_bus_match, |
347 | .uevent = scsi_bus_uevent, | ||
334 | .suspend = scsi_bus_suspend, | 348 | .suspend = scsi_bus_suspend, |
335 | .resume = scsi_bus_resume, | 349 | .resume = scsi_bus_resume, |
336 | }; | 350 | }; |
@@ -558,6 +572,14 @@ show_sdev_iostat(iorequest_cnt); | |||
558 | show_sdev_iostat(iodone_cnt); | 572 | show_sdev_iostat(iodone_cnt); |
559 | show_sdev_iostat(ioerr_cnt); | 573 | show_sdev_iostat(ioerr_cnt); |
560 | 574 | ||
575 | static ssize_t | ||
576 | sdev_show_modalias(struct device *dev, struct device_attribute *attr, char *buf) | ||
577 | { | ||
578 | struct scsi_device *sdev; | ||
579 | sdev = to_scsi_device(dev); | ||
580 | return snprintf (buf, 20, SCSI_DEVICE_MODALIAS_FMT "\n", sdev->type); | ||
581 | } | ||
582 | static DEVICE_ATTR(modalias, S_IRUGO, sdev_show_modalias, NULL); | ||
561 | 583 | ||
562 | /* Default template for device attributes. May NOT be modified */ | 584 | /* Default template for device attributes. May NOT be modified */ |
563 | static struct device_attribute *scsi_sysfs_sdev_attrs[] = { | 585 | static struct device_attribute *scsi_sysfs_sdev_attrs[] = { |
@@ -577,6 +599,7 @@ static struct device_attribute *scsi_sysfs_sdev_attrs[] = { | |||
577 | &dev_attr_iorequest_cnt, | 599 | &dev_attr_iorequest_cnt, |
578 | &dev_attr_iodone_cnt, | 600 | &dev_attr_iodone_cnt, |
579 | &dev_attr_ioerr_cnt, | 601 | &dev_attr_ioerr_cnt, |
602 | &dev_attr_modalias, | ||
580 | NULL | 603 | NULL |
581 | }; | 604 | }; |
582 | 605 | ||
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index b044dcf73427..00e46662296f 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c | |||
@@ -82,6 +82,9 @@ MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK12_MAJOR); | |||
82 | MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK13_MAJOR); | 82 | MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK13_MAJOR); |
83 | MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK14_MAJOR); | 83 | MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK14_MAJOR); |
84 | MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK15_MAJOR); | 84 | MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK15_MAJOR); |
85 | MODULE_ALIAS_SCSI_DEVICE(TYPE_DISK); | ||
86 | MODULE_ALIAS_SCSI_DEVICE(TYPE_MOD); | ||
87 | MODULE_ALIAS_SCSI_DEVICE(TYPE_RBC); | ||
85 | 88 | ||
86 | static DEFINE_IDR(sd_index_idr); | 89 | static DEFINE_IDR(sd_index_idr); |
87 | static DEFINE_SPINLOCK(sd_index_lock); | 90 | static DEFINE_SPINLOCK(sd_index_lock); |
diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c index 1857d68e7195..f9a52af7f5b4 100644 --- a/drivers/scsi/sr.c +++ b/drivers/scsi/sr.c | |||
@@ -62,6 +62,8 @@ | |||
62 | MODULE_DESCRIPTION("SCSI cdrom (sr) driver"); | 62 | MODULE_DESCRIPTION("SCSI cdrom (sr) driver"); |
63 | MODULE_LICENSE("GPL"); | 63 | MODULE_LICENSE("GPL"); |
64 | MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_CDROM_MAJOR); | 64 | MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_CDROM_MAJOR); |
65 | MODULE_ALIAS_SCSI_DEVICE(TYPE_ROM); | ||
66 | MODULE_ALIAS_SCSI_DEVICE(TYPE_WORM); | ||
65 | 67 | ||
66 | #define SR_DISKS 256 | 68 | #define SR_DISKS 256 |
67 | 69 | ||
diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c index 98d8411bbccc..55bfeccf68a2 100644 --- a/drivers/scsi/st.c +++ b/drivers/scsi/st.c | |||
@@ -89,6 +89,7 @@ MODULE_AUTHOR("Kai Makisara"); | |||
89 | MODULE_DESCRIPTION("SCSI tape (st) driver"); | 89 | MODULE_DESCRIPTION("SCSI tape (st) driver"); |
90 | MODULE_LICENSE("GPL"); | 90 | MODULE_LICENSE("GPL"); |
91 | MODULE_ALIAS_CHARDEV_MAJOR(SCSI_TAPE_MAJOR); | 91 | MODULE_ALIAS_CHARDEV_MAJOR(SCSI_TAPE_MAJOR); |
92 | MODULE_ALIAS_SCSI_DEVICE(TYPE_TAPE); | ||
92 | 93 | ||
93 | /* Set 'perm' (4th argument) to 0 to disable module_param's definition | 94 | /* Set 'perm' (4th argument) to 0 to disable module_param's definition |
94 | * of sysfs parameters (which module_param doesn't yet support). | 95 | * of sysfs parameters (which module_param doesn't yet support). |
diff --git a/include/scsi/scsi.h b/include/scsi/scsi.h index 5c0e9791441c..9f8f80ab0c8b 100644 --- a/include/scsi/scsi.h +++ b/include/scsi/scsi.h | |||
@@ -203,6 +203,7 @@ static inline int scsi_status_is_good(int status) | |||
203 | 203 | ||
204 | /* | 204 | /* |
205 | * DEVICE TYPES | 205 | * DEVICE TYPES |
206 | * Please keep them in 0x%02x format for $MODALIAS to work | ||
206 | */ | 207 | */ |
207 | 208 | ||
208 | #define TYPE_DISK 0x00 | 209 | #define TYPE_DISK 0x00 |
diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h index b05cd3b09e6e..2f3c5b8b1d6a 100644 --- a/include/scsi/scsi_device.h +++ b/include/scsi/scsi_device.h | |||
@@ -358,4 +358,9 @@ static inline int scsi_device_qas(struct scsi_device *sdev) | |||
358 | return 0; | 358 | return 0; |
359 | return sdev->inquiry[56] & 0x02; | 359 | return sdev->inquiry[56] & 0x02; |
360 | } | 360 | } |
361 | |||
362 | #define MODULE_ALIAS_SCSI_DEVICE(type) \ | ||
363 | MODULE_ALIAS("scsi:t-" __stringify(type) "*") | ||
364 | #define SCSI_DEVICE_MODALIAS_FMT "scsi:t-0x%02x" | ||
365 | |||
361 | #endif /* _SCSI_SCSI_DEVICE_H */ | 366 | #endif /* _SCSI_SCSI_DEVICE_H */ |