diff options
author | Mike Christie <michaelc@cs.wisc.edu> | 2007-05-30 13:57:08 -0400 |
---|---|---|
committer | James Bottomley <jejb@mulgrave.il.steeleye.com> | 2007-06-01 12:02:51 -0400 |
commit | 1819dc8143eff2a5850af274bcf8bcbc3e73ec76 (patch) | |
tree | c185162d0d340432926b086cc0946e8a9e76e025 /drivers/scsi/scsi_transport_iscsi.c | |
parent | 239a7dc2fea4d079bc3090b5514497a5ced400d3 (diff) |
[SCSI] iscsi_transport: export hw address
Add hw address sysfs file.
Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/scsi/scsi_transport_iscsi.c')
-rw-r--r-- | drivers/scsi/scsi_transport_iscsi.c | 35 |
1 files changed, 33 insertions, 2 deletions
diff --git a/drivers/scsi/scsi_transport_iscsi.c b/drivers/scsi/scsi_transport_iscsi.c index 4fbd8e1a069..1ba98d255fa 100644 --- a/drivers/scsi/scsi_transport_iscsi.c +++ b/drivers/scsi/scsi_transport_iscsi.c | |||
@@ -32,7 +32,7 @@ | |||
32 | 32 | ||
33 | #define ISCSI_SESSION_ATTRS 11 | 33 | #define ISCSI_SESSION_ATTRS 11 |
34 | #define ISCSI_CONN_ATTRS 11 | 34 | #define ISCSI_CONN_ATTRS 11 |
35 | #define ISCSI_HOST_ATTRS 0 | 35 | #define ISCSI_HOST_ATTRS 1 |
36 | #define ISCSI_TRANSPORT_VERSION "2.0-724" | 36 | #define ISCSI_TRANSPORT_VERSION "2.0-724" |
37 | 37 | ||
38 | struct iscsi_internal { | 38 | struct iscsi_internal { |
@@ -1197,6 +1197,25 @@ static ISCSI_CLASS_ATTR(priv_sess, field, S_IRUGO, show_priv_session_##field, \ | |||
1197 | NULL) | 1197 | NULL) |
1198 | iscsi_priv_session_attr(recovery_tmo, "%d"); | 1198 | iscsi_priv_session_attr(recovery_tmo, "%d"); |
1199 | 1199 | ||
1200 | /* | ||
1201 | * iSCSI host attrs | ||
1202 | */ | ||
1203 | #define iscsi_host_attr_show(param) \ | ||
1204 | static ssize_t \ | ||
1205 | show_host_param_##param(struct class_device *cdev, char *buf) \ | ||
1206 | { \ | ||
1207 | struct Scsi_Host *shost = transport_class_to_shost(cdev); \ | ||
1208 | struct iscsi_internal *priv = to_iscsi_internal(shost->transportt); \ | ||
1209 | return priv->iscsi_transport->get_host_param(shost, param, buf); \ | ||
1210 | } | ||
1211 | |||
1212 | #define iscsi_host_attr(field, param) \ | ||
1213 | iscsi_host_attr_show(param) \ | ||
1214 | static ISCSI_CLASS_ATTR(host, field, S_IRUGO, show_host_param_##param, \ | ||
1215 | NULL); | ||
1216 | |||
1217 | iscsi_host_attr(hwaddress, ISCSI_HOST_PARAM_HWADDRESS); | ||
1218 | |||
1200 | #define SETUP_PRIV_SESSION_RD_ATTR(field) \ | 1219 | #define SETUP_PRIV_SESSION_RD_ATTR(field) \ |
1201 | do { \ | 1220 | do { \ |
1202 | priv->session_attrs[count] = &class_device_attr_priv_sess_##field; \ | 1221 | priv->session_attrs[count] = &class_device_attr_priv_sess_##field; \ |
@@ -1220,6 +1239,14 @@ do { \ | |||
1220 | } \ | 1239 | } \ |
1221 | } while (0) | 1240 | } while (0) |
1222 | 1241 | ||
1242 | #define SETUP_HOST_RD_ATTR(field, param_flag) \ | ||
1243 | do { \ | ||
1244 | if (tt->host_param_mask & param_flag) { \ | ||
1245 | priv->host_attrs[count] = &class_device_attr_host_##field; \ | ||
1246 | count++; \ | ||
1247 | } \ | ||
1248 | } while (0) | ||
1249 | |||
1223 | static int iscsi_session_match(struct attribute_container *cont, | 1250 | static int iscsi_session_match(struct attribute_container *cont, |
1224 | struct device *dev) | 1251 | struct device *dev) |
1225 | { | 1252 | { |
@@ -1321,9 +1348,13 @@ iscsi_register_transport(struct iscsi_transport *tt) | |||
1321 | priv->t.host_attrs.ac.class = &iscsi_host_class.class; | 1348 | priv->t.host_attrs.ac.class = &iscsi_host_class.class; |
1322 | priv->t.host_attrs.ac.match = iscsi_host_match; | 1349 | priv->t.host_attrs.ac.match = iscsi_host_match; |
1323 | priv->t.host_size = sizeof(struct iscsi_host); | 1350 | priv->t.host_size = sizeof(struct iscsi_host); |
1324 | priv->host_attrs[0] = NULL; | ||
1325 | transport_container_register(&priv->t.host_attrs); | 1351 | transport_container_register(&priv->t.host_attrs); |
1326 | 1352 | ||
1353 | SETUP_HOST_RD_ATTR(hwaddress, ISCSI_HOST_HWADDRESS); | ||
1354 | BUG_ON(count > ISCSI_HOST_ATTRS); | ||
1355 | priv->host_attrs[count] = NULL; | ||
1356 | count = 0; | ||
1357 | |||
1327 | /* connection parameters */ | 1358 | /* connection parameters */ |
1328 | priv->conn_cont.ac.attrs = &priv->conn_attrs[0]; | 1359 | priv->conn_cont.ac.attrs = &priv->conn_attrs[0]; |
1329 | priv->conn_cont.ac.class = &iscsi_connection_class.class; | 1360 | priv->conn_cont.ac.class = &iscsi_connection_class.class; |