diff options
author | Christoph Hellwig <hch@lst.de> | 2005-10-19 14:01:17 -0400 |
---|---|---|
committer | James Bottomley <jejb@mulgrave.(none)> | 2005-10-28 20:06:45 -0400 |
commit | ac01bbbd3b7ebfca64357aed12cf476b16abe3ce (patch) | |
tree | e0ab34ebdabb88f31a0b06321df5c7ff7122455a | |
parent | 80d904c43b11105c16395b240078ccc2f7ac6074 (diff) |
[SCSI] sas: add flag for locally attached PHYs
Add a flag to mark a PHY as attached to the HBA as opposed to beeing on
an expander. This is needed because various features are only supported
on those. This is a crude hack, the proper fix would be to use
different classes for host-attached vs expander phys. I'm looking into
that.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
-rw-r--r-- | drivers/message/fusion/mptsas.c | 10 | ||||
-rw-r--r-- | drivers/scsi/scsi_transport_sas.c | 3 | ||||
-rw-r--r-- | include/scsi/scsi_transport_sas.h | 3 |
3 files changed, 13 insertions, 3 deletions
diff --git a/drivers/message/fusion/mptsas.c b/drivers/message/fusion/mptsas.c index 6512027bc69a..dcdf0380be86 100644 --- a/drivers/message/fusion/mptsas.c +++ b/drivers/message/fusion/mptsas.c | |||
@@ -760,7 +760,7 @@ mptsas_parse_device_info(struct sas_identify *identify, | |||
760 | } | 760 | } |
761 | 761 | ||
762 | static int mptsas_probe_one_phy(struct device *dev, | 762 | static int mptsas_probe_one_phy(struct device *dev, |
763 | struct mptsas_phyinfo *phy_info, int index) | 763 | struct mptsas_phyinfo *phy_info, int index, int local) |
764 | { | 764 | { |
765 | struct sas_phy *port; | 765 | struct sas_phy *port; |
766 | int error; | 766 | int error; |
@@ -853,6 +853,9 @@ static int mptsas_probe_one_phy(struct device *dev, | |||
853 | break; | 853 | break; |
854 | } | 854 | } |
855 | 855 | ||
856 | if (local) | ||
857 | port->local_attached = 1; | ||
858 | |||
856 | error = sas_phy_add(port); | 859 | error = sas_phy_add(port); |
857 | if (error) { | 860 | if (error) { |
858 | sas_phy_free(port); | 861 | sas_phy_free(port); |
@@ -918,7 +921,7 @@ mptsas_probe_hba_phys(MPT_ADAPTER *ioc, int *index) | |||
918 | } | 921 | } |
919 | 922 | ||
920 | mptsas_probe_one_phy(&ioc->sh->shost_gendev, | 923 | mptsas_probe_one_phy(&ioc->sh->shost_gendev, |
921 | &port_info->phy_info[i], *index); | 924 | &port_info->phy_info[i], *index, 1); |
922 | (*index)++; | 925 | (*index)++; |
923 | } | 926 | } |
924 | 927 | ||
@@ -989,7 +992,8 @@ mptsas_probe_expander_phys(MPT_ADAPTER *ioc, u32 *handle, int *index) | |||
989 | } | 992 | } |
990 | } | 993 | } |
991 | 994 | ||
992 | mptsas_probe_one_phy(parent, &port_info->phy_info[i], *index); | 995 | mptsas_probe_one_phy(parent, &port_info->phy_info[i], |
996 | *index, 0); | ||
993 | (*index)++; | 997 | (*index)++; |
994 | } | 998 | } |
995 | 999 | ||
diff --git a/drivers/scsi/scsi_transport_sas.c b/drivers/scsi/scsi_transport_sas.c index 63445f90097e..f5618c1116f4 100644 --- a/drivers/scsi/scsi_transport_sas.c +++ b/drivers/scsi/scsi_transport_sas.c | |||
@@ -266,6 +266,9 @@ show_sas_phy_##field(struct class_device *cdev, char *buf) \ | |||
266 | struct sas_internal *i = to_sas_internal(shost->transportt); \ | 266 | struct sas_internal *i = to_sas_internal(shost->transportt); \ |
267 | int error; \ | 267 | int error; \ |
268 | \ | 268 | \ |
269 | if (!phy->local_attached) \ | ||
270 | return -EINVAL; \ | ||
271 | \ | ||
269 | error = i->f->get_linkerrors(phy); \ | 272 | error = i->f->get_linkerrors(phy); \ |
270 | if (error) \ | 273 | if (error) \ |
271 | return error; \ | 274 | return error; \ |
diff --git a/include/scsi/scsi_transport_sas.h b/include/scsi/scsi_transport_sas.h index 38389d8dd56e..57eb68c6e9a7 100644 --- a/include/scsi/scsi_transport_sas.h +++ b/include/scsi/scsi_transport_sas.h | |||
@@ -56,6 +56,9 @@ struct sas_phy { | |||
56 | enum sas_linkrate maximum_linkrate; | 56 | enum sas_linkrate maximum_linkrate; |
57 | u8 port_identifier; | 57 | u8 port_identifier; |
58 | 58 | ||
59 | /* internal state */ | ||
60 | unsigned int local_attached : 1; | ||
61 | |||
59 | /* link error statistics */ | 62 | /* link error statistics */ |
60 | u32 invalid_dword_count; | 63 | u32 invalid_dword_count; |
61 | u32 running_disparity_error_count; | 64 | u32 running_disparity_error_count; |