[SCSI] mptfc: add additional fc transport attributes
Add host_supported_speeds, host_maxframe_size, host_speed, host_fabric_name, host_port_type, host_port_state, and host_symbolic_name transport attributes to fusion fibre channel. Signed-off-by: Michael Reed <mdr@sgi.com> Acked-by: Moore, Eric <Eric.Moore@lsil.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
parent
dd7e2f2266
commit
5d947f2b76
|
@ -162,7 +162,13 @@ static struct fc_function_template mptfc_transport_functions = {
|
|||
.show_starget_port_id = 1,
|
||||
.set_rport_dev_loss_tmo = mptfc_set_rport_loss_tmo,
|
||||
.show_rport_dev_loss_tmo = 1,
|
||||
|
||||
.show_host_supported_speeds = 1,
|
||||
.show_host_maxframe_size = 1,
|
||||
.show_host_speed = 1,
|
||||
.show_host_fabric_name = 1,
|
||||
.show_host_port_type = 1,
|
||||
.show_host_port_state = 1,
|
||||
.show_host_symbolic_name = 1,
|
||||
};
|
||||
|
||||
static void
|
||||
|
@ -836,33 +842,95 @@ mptfc_SetFcPortPage1_defaults(MPT_ADAPTER *ioc)
|
|||
static void
|
||||
mptfc_init_host_attr(MPT_ADAPTER *ioc,int portnum)
|
||||
{
|
||||
unsigned class = 0, cos = 0;
|
||||
unsigned class = 0;
|
||||
unsigned cos = 0;
|
||||
unsigned speed;
|
||||
unsigned port_type;
|
||||
unsigned port_state;
|
||||
FCPortPage0_t *pp0;
|
||||
struct Scsi_Host *sh;
|
||||
char *sn;
|
||||
|
||||
/* don't know what to do as only one scsi (fc) host was allocated */
|
||||
if (portnum != 0)
|
||||
return;
|
||||
|
||||
class = ioc->fc_port_page0[portnum].SupportedServiceClass;
|
||||
pp0 = &ioc->fc_port_page0[portnum];
|
||||
sh = ioc->sh;
|
||||
|
||||
sn = fc_host_symbolic_name(sh);
|
||||
snprintf(sn, FC_SYMBOLIC_NAME_SIZE, "%s %s%08xh",
|
||||
ioc->prod_name,
|
||||
MPT_FW_REV_MAGIC_ID_STRING,
|
||||
ioc->facts.FWVersion.Word);
|
||||
|
||||
fc_host_tgtid_bind_type(sh) = FC_TGTID_BIND_BY_WWPN;
|
||||
|
||||
fc_host_maxframe_size(sh) = pp0->MaxFrameSize;
|
||||
|
||||
fc_host_node_name(sh) =
|
||||
(u64)pp0->WWNN.High << 32 | (u64)pp0->WWNN.Low;
|
||||
|
||||
fc_host_port_name(sh) =
|
||||
(u64)pp0->WWPN.High << 32 | (u64)pp0->WWPN.Low;
|
||||
|
||||
fc_host_port_id(sh) = pp0->PortIdentifier;
|
||||
|
||||
class = pp0->SupportedServiceClass;
|
||||
if (class & MPI_FCPORTPAGE0_SUPPORT_CLASS_1)
|
||||
cos |= FC_COS_CLASS1;
|
||||
if (class & MPI_FCPORTPAGE0_SUPPORT_CLASS_2)
|
||||
cos |= FC_COS_CLASS2;
|
||||
if (class & MPI_FCPORTPAGE0_SUPPORT_CLASS_3)
|
||||
cos |= FC_COS_CLASS3;
|
||||
fc_host_supported_classes(sh) = cos;
|
||||
|
||||
fc_host_node_name(ioc->sh) =
|
||||
(u64)ioc->fc_port_page0[portnum].WWNN.High << 32
|
||||
| (u64)ioc->fc_port_page0[portnum].WWNN.Low;
|
||||
if (pp0->CurrentSpeed == MPI_FCPORTPAGE0_CURRENT_SPEED_1GBIT)
|
||||
speed = FC_PORTSPEED_1GBIT;
|
||||
else if (pp0->CurrentSpeed == MPI_FCPORTPAGE0_CURRENT_SPEED_2GBIT)
|
||||
speed = FC_PORTSPEED_2GBIT;
|
||||
else if (pp0->CurrentSpeed == MPI_FCPORTPAGE0_CURRENT_SPEED_4GBIT)
|
||||
speed = FC_PORTSPEED_4GBIT;
|
||||
else if (pp0->CurrentSpeed == MPI_FCPORTPAGE0_CURRENT_SPEED_10GBIT)
|
||||
speed = FC_PORTSPEED_10GBIT;
|
||||
else
|
||||
speed = FC_PORTSPEED_UNKNOWN;
|
||||
fc_host_speed(sh) = speed;
|
||||
|
||||
fc_host_port_name(ioc->sh) =
|
||||
(u64)ioc->fc_port_page0[portnum].WWPN.High << 32
|
||||
| (u64)ioc->fc_port_page0[portnum].WWPN.Low;
|
||||
speed = 0;
|
||||
if (pp0->SupportedSpeeds & MPI_FCPORTPAGE0_SUPPORT_1GBIT_SPEED)
|
||||
speed |= FC_PORTSPEED_1GBIT;
|
||||
if (pp0->SupportedSpeeds & MPI_FCPORTPAGE0_SUPPORT_2GBIT_SPEED)
|
||||
speed |= FC_PORTSPEED_2GBIT;
|
||||
if (pp0->SupportedSpeeds & MPI_FCPORTPAGE0_SUPPORT_4GBIT_SPEED)
|
||||
speed |= FC_PORTSPEED_4GBIT;
|
||||
if (pp0->SupportedSpeeds & MPI_FCPORTPAGE0_SUPPORT_10GBIT_SPEED)
|
||||
speed |= FC_PORTSPEED_10GBIT;
|
||||
fc_host_supported_speeds(sh) = speed;
|
||||
|
||||
fc_host_port_id(ioc->sh) = ioc->fc_port_page0[portnum].PortIdentifier;
|
||||
port_state = FC_PORTSTATE_UNKNOWN;
|
||||
if (pp0->PortState == MPI_FCPORTPAGE0_PORTSTATE_ONLINE)
|
||||
port_state = FC_PORTSTATE_ONLINE;
|
||||
else if (pp0->PortState == MPI_FCPORTPAGE0_PORTSTATE_OFFLINE)
|
||||
port_state = FC_PORTSTATE_LINKDOWN;
|
||||
fc_host_port_state(sh) = port_state;
|
||||
|
||||
fc_host_supported_classes(ioc->sh) = cos;
|
||||
port_type = FC_PORTTYPE_UNKNOWN;
|
||||
if (pp0->Flags & MPI_FCPORTPAGE0_FLAGS_ATTACH_POINT_TO_POINT)
|
||||
port_type = FC_PORTTYPE_PTP;
|
||||
else if (pp0->Flags & MPI_FCPORTPAGE0_FLAGS_ATTACH_PRIVATE_LOOP)
|
||||
port_type = FC_PORTTYPE_LPORT;
|
||||
else if (pp0->Flags & MPI_FCPORTPAGE0_FLAGS_ATTACH_PUBLIC_LOOP)
|
||||
port_type = FC_PORTTYPE_NLPORT;
|
||||
else if (pp0->Flags & MPI_FCPORTPAGE0_FLAGS_ATTACH_FABRIC_DIRECT)
|
||||
port_type = FC_PORTTYPE_NPORT;
|
||||
fc_host_port_type(sh) = port_type;
|
||||
|
||||
fc_host_fabric_name(sh) =
|
||||
(pp0->Flags & MPI_FCPORTPAGE0_FLAGS_FABRIC_WWN_VALID) ?
|
||||
(u64) pp0->FabricWWNN.High << 32 | (u64) pp0->FabricWWPN.Low :
|
||||
(u64)pp0->WWNN.High << 32 | (u64)pp0->WWNN.Low;
|
||||
|
||||
fc_host_tgtid_bind_type(ioc->sh) = FC_TGTID_BIND_BY_WWPN;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
Loading…
Reference in New Issue