Commit ac01bbbd authored by Christoph Hellwig's avatar Christoph Hellwig Committed by James Bottomley

[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: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
parent 80d904c4
...@@ -760,7 +760,7 @@ mptsas_parse_device_info(struct sas_identify *identify, ...@@ -760,7 +760,7 @@ mptsas_parse_device_info(struct sas_identify *identify,
} }
static int mptsas_probe_one_phy(struct device *dev, static int mptsas_probe_one_phy(struct device *dev,
struct mptsas_phyinfo *phy_info, int index) struct mptsas_phyinfo *phy_info, int index, int local)
{ {
struct sas_phy *port; struct sas_phy *port;
int error; int error;
...@@ -853,6 +853,9 @@ static int mptsas_probe_one_phy(struct device *dev, ...@@ -853,6 +853,9 @@ static int mptsas_probe_one_phy(struct device *dev,
break; break;
} }
if (local)
port->local_attached = 1;
error = sas_phy_add(port); error = sas_phy_add(port);
if (error) { if (error) {
sas_phy_free(port); sas_phy_free(port);
...@@ -918,7 +921,7 @@ mptsas_probe_hba_phys(MPT_ADAPTER *ioc, int *index) ...@@ -918,7 +921,7 @@ mptsas_probe_hba_phys(MPT_ADAPTER *ioc, int *index)
} }
mptsas_probe_one_phy(&ioc->sh->shost_gendev, mptsas_probe_one_phy(&ioc->sh->shost_gendev,
&port_info->phy_info[i], *index); &port_info->phy_info[i], *index, 1);
(*index)++; (*index)++;
} }
...@@ -989,7 +992,8 @@ mptsas_probe_expander_phys(MPT_ADAPTER *ioc, u32 *handle, int *index) ...@@ -989,7 +992,8 @@ mptsas_probe_expander_phys(MPT_ADAPTER *ioc, u32 *handle, int *index)
} }
} }
mptsas_probe_one_phy(parent, &port_info->phy_info[i], *index); mptsas_probe_one_phy(parent, &port_info->phy_info[i],
*index, 0);
(*index)++; (*index)++;
} }
......
...@@ -266,6 +266,9 @@ show_sas_phy_##field(struct class_device *cdev, char *buf) \ ...@@ -266,6 +266,9 @@ show_sas_phy_##field(struct class_device *cdev, char *buf) \
struct sas_internal *i = to_sas_internal(shost->transportt); \ struct sas_internal *i = to_sas_internal(shost->transportt); \
int error; \ int error; \
\ \
if (!phy->local_attached) \
return -EINVAL; \
\
error = i->f->get_linkerrors(phy); \ error = i->f->get_linkerrors(phy); \
if (error) \ if (error) \
return error; \ return error; \
......
...@@ -56,6 +56,9 @@ struct sas_phy { ...@@ -56,6 +56,9 @@ struct sas_phy {
enum sas_linkrate maximum_linkrate; enum sas_linkrate maximum_linkrate;
u8 port_identifier; u8 port_identifier;
/* internal state */
unsigned int local_attached : 1;
/* link error statistics */ /* link error statistics */
u32 invalid_dword_count; u32 invalid_dword_count;
u32 running_disparity_error_count; u32 running_disparity_error_count;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment