[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>
This commit is contained in:
Christoph Hellwig 2005-10-19 20:01:17 +02:00 committed by James Bottomley
parent 80d904c43b
commit ac01bbbd3b
3 changed files with 13 additions and 3 deletions

View File

@ -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,
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)
} }
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)
} }
} }
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)++;
} }

View File

@ -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; \

View File

@ -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;