scsi: fcoe: provide translation table between Ethernet and FC port speeds
Provide a translation table between Ethernet and FC port speeds so odd speeds (from a Ethernet POV) like 8 Gbit are correctly mapped to sysfs and open-fcoe's fcoeadm. Before: Description: BCM57840 NetXtreme II 10/20-Gigabit Ethernet Revision: 11 Manufacturer: Broadcom Corporation Serial Number: 6CC2173EA1D0 Driver: bnx2x 1.712.30-0 Number of Ports: 1 Symbolic Name: bnx2fc (QLogic BCM57840) v2.10.3 over eth2 OS Device Name: host1 Node Name: 0x20006cc2173ea1d1 Port Name: 0x10006cc2173ea1d1 FabricName: 0x100000c0dd0ce717 Speed: unknown Supported Speed: 1 Gbit, 10 Gbit MaxFrameSize: 2048 bytes FC-ID (Port ID): 0x660702 State: Online After: Description: BCM57840 NetXtreme II 10/20-Gigabit Ethernet Revision: 11 Manufacturer: Broadcom Corporation Serial Number: 6CC2173EA1D0 Driver: bnx2x 1.712.30-0 Number of Ports: 1 Symbolic Name: bnx2fc (QLogic BCM57840) v2.10.3 over eth2 OS Device Name: host1 Node Name: 0x20006cc2173ea1d1 Port Name: 0x10006cc2173ea1d1 FabricName: 0x100000c0dd0ce717 Speed: 8 Gbit Supported Speed: 1 Gbit, 10 Gbit MaxFrameSize: 2048 bytes FC-ID (Port ID): 0x660701 State: Online Signed-off-by: Johannes Thumshirn <jthumshirn@suse.de> Reviewed-by: Hannes Reinicke <hare@suse.de> Reviewed-by: Lee Duncan <lduncan@suse.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
9442c9b0ed
commit
0b924e5505
|
@ -83,6 +83,41 @@ static struct notifier_block libfcoe_notifier = {
|
||||||
.notifier_call = libfcoe_device_notification,
|
.notifier_call = libfcoe_device_notification,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const struct {
|
||||||
|
u32 fc_port_speed;
|
||||||
|
#define SPEED_2000 2000
|
||||||
|
#define SPEED_4000 4000
|
||||||
|
#define SPEED_8000 8000
|
||||||
|
#define SPEED_16000 16000
|
||||||
|
#define SPEED_32000 32000
|
||||||
|
u32 eth_port_speed;
|
||||||
|
} fcoe_port_speed_mapping[] = {
|
||||||
|
{ FC_PORTSPEED_1GBIT, SPEED_1000 },
|
||||||
|
{ FC_PORTSPEED_2GBIT, SPEED_2000 },
|
||||||
|
{ FC_PORTSPEED_4GBIT, SPEED_4000 },
|
||||||
|
{ FC_PORTSPEED_8GBIT, SPEED_8000 },
|
||||||
|
{ FC_PORTSPEED_10GBIT, SPEED_10000 },
|
||||||
|
{ FC_PORTSPEED_16GBIT, SPEED_16000 },
|
||||||
|
{ FC_PORTSPEED_20GBIT, SPEED_20000 },
|
||||||
|
{ FC_PORTSPEED_25GBIT, SPEED_25000 },
|
||||||
|
{ FC_PORTSPEED_32GBIT, SPEED_32000 },
|
||||||
|
{ FC_PORTSPEED_40GBIT, SPEED_40000 },
|
||||||
|
{ FC_PORTSPEED_50GBIT, SPEED_50000 },
|
||||||
|
{ FC_PORTSPEED_100GBIT, SPEED_100000 },
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline u32 eth2fc_speed(u32 eth_port_speed)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i <= ARRAY_SIZE(fcoe_port_speed_mapping); i++) {
|
||||||
|
if (fcoe_port_speed_mapping[i].eth_port_speed == eth_port_speed)
|
||||||
|
return fcoe_port_speed_mapping[i].fc_port_speed;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FC_PORTSPEED_UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* fcoe_link_speed_update() - Update the supported and actual link speeds
|
* fcoe_link_speed_update() - Update the supported and actual link speeds
|
||||||
* @lport: The local port to update speeds for
|
* @lport: The local port to update speeds for
|
||||||
|
@ -126,23 +161,7 @@ int fcoe_link_speed_update(struct fc_lport *lport)
|
||||||
SUPPORTED_40000baseLR4_Full))
|
SUPPORTED_40000baseLR4_Full))
|
||||||
lport->link_supported_speeds |= FC_PORTSPEED_40GBIT;
|
lport->link_supported_speeds |= FC_PORTSPEED_40GBIT;
|
||||||
|
|
||||||
switch (ecmd.base.speed) {
|
lport->link_speed = eth2fc_speed(ecmd.base.speed);
|
||||||
case SPEED_1000:
|
|
||||||
lport->link_speed = FC_PORTSPEED_1GBIT;
|
|
||||||
break;
|
|
||||||
case SPEED_10000:
|
|
||||||
lport->link_speed = FC_PORTSPEED_10GBIT;
|
|
||||||
break;
|
|
||||||
case SPEED_20000:
|
|
||||||
lport->link_speed = FC_PORTSPEED_20GBIT;
|
|
||||||
break;
|
|
||||||
case SPEED_40000:
|
|
||||||
lport->link_speed = FC_PORTSPEED_40GBIT;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
lport->link_speed = FC_PORTSPEED_UNKNOWN;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
|
|
Loading…
Reference in New Issue