mirror of
https://github.com/torvalds/linux.git
synced 2024-11-17 09:31:50 +00:00
IB: Add new InfiniBand link speeds
Introduce support for the following extended speeds: FDR-10: a Mellanox proprietary link speed which is 10.3125 Gbps with 64b/66b encoding rather than 8b/10b encoding. FDR: IBA extended speed 14.0625 Gbps. EDR: IBA extended speed 25.78125 Gbps. Signed-off-by: Marcel Apfelbaum <marcela@dev.mellanox.co.il> Reviewed-by: Hal Rosenstock <hal@mellanox.com> Reviewed-by: Sean Hefty <sean.hefty@intel.com> Signed-off-by: Roland Dreier <roland@purestorage.com>
This commit is contained in:
parent
976d167615
commit
71eeba161d
@ -185,17 +185,35 @@ static ssize_t rate_show(struct ib_port *p, struct port_attribute *unused,
|
|||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
rate = (25 * attr.active_speed) / 10;
|
||||||
|
|
||||||
switch (attr.active_speed) {
|
switch (attr.active_speed) {
|
||||||
case 2: speed = " DDR"; break;
|
case 2:
|
||||||
case 4: speed = " QDR"; break;
|
speed = " DDR";
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
speed = " QDR";
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
speed = " FDR10";
|
||||||
|
rate = 10;
|
||||||
|
break;
|
||||||
|
case 16:
|
||||||
|
speed = " FDR";
|
||||||
|
rate = 14;
|
||||||
|
break;
|
||||||
|
case 32:
|
||||||
|
speed = " EDR";
|
||||||
|
rate = 25;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
rate = 25 * ib_width_enum_to_int(attr.active_width) * attr.active_speed;
|
rate *= ib_width_enum_to_int(attr.active_width);
|
||||||
if (rate < 0)
|
if (rate < 0)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
return sprintf(buf, "%d%s Gb/sec (%dX%s)\n",
|
return sprintf(buf, "%d%s Gb/sec (%dX%s)\n",
|
||||||
rate / 10, rate % 10 ? ".5" : "",
|
rate, (attr.active_speed == 1) ? ".5" : "",
|
||||||
ib_width_enum_to_int(attr.active_width), speed);
|
ib_width_enum_to_int(attr.active_width), speed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,6 +77,31 @@ enum ib_rate mult_to_ib_rate(int mult)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(mult_to_ib_rate);
|
EXPORT_SYMBOL(mult_to_ib_rate);
|
||||||
|
|
||||||
|
int ib_rate_to_mbps(enum ib_rate rate)
|
||||||
|
{
|
||||||
|
switch (rate) {
|
||||||
|
case IB_RATE_2_5_GBPS: return 2500;
|
||||||
|
case IB_RATE_5_GBPS: return 5000;
|
||||||
|
case IB_RATE_10_GBPS: return 10000;
|
||||||
|
case IB_RATE_20_GBPS: return 20000;
|
||||||
|
case IB_RATE_30_GBPS: return 30000;
|
||||||
|
case IB_RATE_40_GBPS: return 40000;
|
||||||
|
case IB_RATE_60_GBPS: return 60000;
|
||||||
|
case IB_RATE_80_GBPS: return 80000;
|
||||||
|
case IB_RATE_120_GBPS: return 120000;
|
||||||
|
case IB_RATE_14_GBPS: return 14062;
|
||||||
|
case IB_RATE_56_GBPS: return 56250;
|
||||||
|
case IB_RATE_112_GBPS: return 112500;
|
||||||
|
case IB_RATE_168_GBPS: return 168750;
|
||||||
|
case IB_RATE_25_GBPS: return 25781;
|
||||||
|
case IB_RATE_100_GBPS: return 103125;
|
||||||
|
case IB_RATE_200_GBPS: return 206250;
|
||||||
|
case IB_RATE_300_GBPS: return 309375;
|
||||||
|
default: return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(ib_rate_to_mbps);
|
||||||
|
|
||||||
enum rdma_transport_type
|
enum rdma_transport_type
|
||||||
rdma_node_get_transport(enum rdma_node_type node_type)
|
rdma_node_get_transport(enum rdma_node_type node_type)
|
||||||
{
|
{
|
||||||
|
@ -207,6 +207,7 @@ enum ib_port_cap_flags {
|
|||||||
IB_PORT_SM_DISABLED = 1 << 10,
|
IB_PORT_SM_DISABLED = 1 << 10,
|
||||||
IB_PORT_SYS_IMAGE_GUID_SUP = 1 << 11,
|
IB_PORT_SYS_IMAGE_GUID_SUP = 1 << 11,
|
||||||
IB_PORT_PKEY_SW_EXT_PORT_TRAP_SUP = 1 << 12,
|
IB_PORT_PKEY_SW_EXT_PORT_TRAP_SUP = 1 << 12,
|
||||||
|
IB_PORT_EXTENDED_SPEEDS_SUP = 1 << 14,
|
||||||
IB_PORT_CM_SUP = 1 << 16,
|
IB_PORT_CM_SUP = 1 << 16,
|
||||||
IB_PORT_SNMP_TUNNEL_SUP = 1 << 17,
|
IB_PORT_SNMP_TUNNEL_SUP = 1 << 17,
|
||||||
IB_PORT_REINIT_SUP = 1 << 18,
|
IB_PORT_REINIT_SUP = 1 << 18,
|
||||||
@ -415,7 +416,15 @@ enum ib_rate {
|
|||||||
IB_RATE_40_GBPS = 7,
|
IB_RATE_40_GBPS = 7,
|
||||||
IB_RATE_60_GBPS = 8,
|
IB_RATE_60_GBPS = 8,
|
||||||
IB_RATE_80_GBPS = 9,
|
IB_RATE_80_GBPS = 9,
|
||||||
IB_RATE_120_GBPS = 10
|
IB_RATE_120_GBPS = 10,
|
||||||
|
IB_RATE_14_GBPS = 11,
|
||||||
|
IB_RATE_56_GBPS = 12,
|
||||||
|
IB_RATE_112_GBPS = 13,
|
||||||
|
IB_RATE_168_GBPS = 14,
|
||||||
|
IB_RATE_25_GBPS = 15,
|
||||||
|
IB_RATE_100_GBPS = 16,
|
||||||
|
IB_RATE_200_GBPS = 17,
|
||||||
|
IB_RATE_300_GBPS = 18
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -426,6 +435,13 @@ enum ib_rate {
|
|||||||
*/
|
*/
|
||||||
int ib_rate_to_mult(enum ib_rate rate) __attribute_const__;
|
int ib_rate_to_mult(enum ib_rate rate) __attribute_const__;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ib_rate_to_mbps - Convert the IB rate enum to Mbps.
|
||||||
|
* For example, IB_RATE_2_5_GBPS will be converted to 2500.
|
||||||
|
* @rate: rate to convert.
|
||||||
|
*/
|
||||||
|
int ib_rate_to_mbps(enum ib_rate rate) __attribute_const__;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* mult_to_ib_rate - Convert a multiple of 2.5 Gbit/sec to an IB rate
|
* mult_to_ib_rate - Convert a multiple of 2.5 Gbit/sec to an IB rate
|
||||||
* enum.
|
* enum.
|
||||||
|
Loading…
Reference in New Issue
Block a user