diff options
-rw-r--r-- | drivers/ieee1394/nodemgr.c | 5 | ||||
-rw-r--r-- | drivers/ieee1394/nodemgr.h | 1 | ||||
-rw-r--r-- | drivers/ieee1394/sbp2.c | 31 |
3 files changed, 35 insertions, 2 deletions
diff --git a/drivers/ieee1394/nodemgr.c b/drivers/ieee1394/nodemgr.c index c291602a12d7..81b3864d2ba7 100644 --- a/drivers/ieee1394/nodemgr.c +++ b/drivers/ieee1394/nodemgr.c | |||
@@ -977,6 +977,7 @@ static struct unit_directory *nodemgr_process_unit_directory | |||
977 | ud->ne = ne; | 977 | ud->ne = ne; |
978 | ud->ignore_driver = ignore_drivers; | 978 | ud->ignore_driver = ignore_drivers; |
979 | ud->address = ud_kv->offset + CSR1212_REGISTER_SPACE_BASE; | 979 | ud->address = ud_kv->offset + CSR1212_REGISTER_SPACE_BASE; |
980 | ud->directory_id = ud->address & 0xffffff; | ||
980 | ud->ud_kv = ud_kv; | 981 | ud->ud_kv = ud_kv; |
981 | ud->id = (*id)++; | 982 | ud->id = (*id)++; |
982 | 983 | ||
@@ -1085,6 +1086,10 @@ static struct unit_directory *nodemgr_process_unit_directory | |||
1085 | 1086 | ||
1086 | break; | 1087 | break; |
1087 | 1088 | ||
1089 | case CSR1212_KV_ID_DIRECTORY_ID: | ||
1090 | ud->directory_id = kv->value.immediate; | ||
1091 | break; | ||
1092 | |||
1088 | default: | 1093 | default: |
1089 | break; | 1094 | break; |
1090 | } | 1095 | } |
diff --git a/drivers/ieee1394/nodemgr.h b/drivers/ieee1394/nodemgr.h index e7ac683c72c7..4530b29d941c 100644 --- a/drivers/ieee1394/nodemgr.h +++ b/drivers/ieee1394/nodemgr.h | |||
@@ -75,6 +75,7 @@ struct unit_directory { | |||
75 | struct csr1212_keyval *model_name_kv; | 75 | struct csr1212_keyval *model_name_kv; |
76 | quadlet_t specifier_id; | 76 | quadlet_t specifier_id; |
77 | quadlet_t version; | 77 | quadlet_t version; |
78 | quadlet_t directory_id; | ||
78 | 79 | ||
79 | unsigned int id; | 80 | unsigned int id; |
80 | 81 | ||
diff --git a/drivers/ieee1394/sbp2.c b/drivers/ieee1394/sbp2.c index 875eadd5e8f5..3f873cc7e247 100644 --- a/drivers/ieee1394/sbp2.c +++ b/drivers/ieee1394/sbp2.c | |||
@@ -194,6 +194,27 @@ MODULE_PARM_DESC(workarounds, "Work around device bugs (default = 0" | |||
194 | ", override internal blacklist = " __stringify(SBP2_WORKAROUND_OVERRIDE) | 194 | ", override internal blacklist = " __stringify(SBP2_WORKAROUND_OVERRIDE) |
195 | ", or a combination)"); | 195 | ", or a combination)"); |
196 | 196 | ||
197 | /* | ||
198 | * This influences the format of the sysfs attribute | ||
199 | * /sys/bus/scsi/devices/.../ieee1394_id. | ||
200 | * | ||
201 | * The default format is like in older kernels: %016Lx:%d:%d | ||
202 | * It contains the target's EUI-64, a number given to the logical unit by | ||
203 | * the ieee1394 driver's nodemgr (starting at 0), and the LUN. | ||
204 | * | ||
205 | * The long format is: %016Lx:%06x:%04x | ||
206 | * It contains the target's EUI-64, the unit directory's directory_ID as per | ||
207 | * IEEE 1212 clause 7.7.19, and the LUN. This format comes closest to the | ||
208 | * format of SBP(-3) target port and logical unit identifier as per SAM (SCSI | ||
209 | * Architecture Model) rev.2 to 4 annex A. Therefore and because it is | ||
210 | * independent of the implementation of the ieee1394 nodemgr, the longer format | ||
211 | * is recommended for future use. | ||
212 | */ | ||
213 | static int sbp2_long_sysfs_ieee1394_id; | ||
214 | module_param_named(long_ieee1394_id, sbp2_long_sysfs_ieee1394_id, bool, 0644); | ||
215 | MODULE_PARM_DESC(long_ieee1394_id, "8+3+2 bytes format of ieee1394_id in sysfs " | ||
216 | "(default = backwards-compatible = N, SAM-conforming = Y)"); | ||
217 | |||
197 | 218 | ||
198 | #define SBP2_INFO(fmt, args...) HPSB_INFO("sbp2: "fmt, ## args) | 219 | #define SBP2_INFO(fmt, args...) HPSB_INFO("sbp2: "fmt, ## args) |
199 | #define SBP2_ERR(fmt, args...) HPSB_ERR("sbp2: "fmt, ## args) | 220 | #define SBP2_ERR(fmt, args...) HPSB_ERR("sbp2: "fmt, ## args) |
@@ -2100,8 +2121,14 @@ static ssize_t sbp2_sysfs_ieee1394_id_show(struct device *dev, | |||
2100 | if (!(lu = (struct sbp2_lu *)sdev->host->hostdata[0])) | 2121 | if (!(lu = (struct sbp2_lu *)sdev->host->hostdata[0])) |
2101 | return 0; | 2122 | return 0; |
2102 | 2123 | ||
2103 | return sprintf(buf, "%016Lx:%d:%d\n", (unsigned long long)lu->ne->guid, | 2124 | if (sbp2_long_sysfs_ieee1394_id) |
2104 | lu->ud->id, ORB_SET_LUN(lu->lun)); | 2125 | return sprintf(buf, "%016Lx:%06x:%04x\n", |
2126 | (unsigned long long)lu->ne->guid, | ||
2127 | lu->ud->directory_id, ORB_SET_LUN(lu->lun)); | ||
2128 | else | ||
2129 | return sprintf(buf, "%016Lx:%d:%d\n", | ||
2130 | (unsigned long long)lu->ne->guid, | ||
2131 | lu->ud->id, ORB_SET_LUN(lu->lun)); | ||
2105 | } | 2132 | } |
2106 | 2133 | ||
2107 | MODULE_AUTHOR("Ben Collins <bcollins@debian.org>"); | 2134 | MODULE_AUTHOR("Ben Collins <bcollins@debian.org>"); |