aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcel Apfelbaum <marcela@dev.mellanox.co.il>2011-10-05 07:21:47 -0400
committerRoland Dreier <roland@purestorage.com>2011-10-11 14:53:47 -0400
commit71eeba161d7611238ecb6f525a82325aa35339f0 (patch)
tree97e4a2b1cf8754029ef0755cd67d1502659e2af1
parent976d167615b64e14bc1491ca51d424e2ba9a5e84 (diff)
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>
-rw-r--r--drivers/infiniband/core/sysfs.c26
-rw-r--r--drivers/infiniband/core/verbs.c25
-rw-r--r--include/rdma/ib_verbs.h18
3 files changed, 64 insertions, 5 deletions
diff --git a/drivers/infiniband/core/sysfs.c b/drivers/infiniband/core/sysfs.c
index 9ab5df72df7b..2b59b72b57f9 100644
--- a/drivers/infiniband/core/sysfs.c
+++ b/drivers/infiniband/core/sysfs.c
@@ -185,17 +185,35 @@ static ssize_t rate_show(struct ib_port *p, struct port_attribute *unused,
185 if (ret) 185 if (ret)
186 return ret; 186 return ret;
187 187
188 rate = (25 * attr.active_speed) / 10;
189
188 switch (attr.active_speed) { 190 switch (attr.active_speed) {
189 case 2: speed = " DDR"; break; 191 case 2:
190 case 4: speed = " QDR"; break; 192 speed = " DDR";
193 break;
194 case 4:
195 speed = " QDR";
196 break;
197 case 8:
198 speed = " FDR10";
199 rate = 10;
200 break;
201 case 16:
202 speed = " FDR";
203 rate = 14;
204 break;
205 case 32:
206 speed = " EDR";
207 rate = 25;
208 break;
191 } 209 }
192 210
193 rate = 25 * ib_width_enum_to_int(attr.active_width) * attr.active_speed; 211 rate *= ib_width_enum_to_int(attr.active_width);
194 if (rate < 0) 212 if (rate < 0)
195 return -EINVAL; 213 return -EINVAL;
196 214
197 return sprintf(buf, "%d%s Gb/sec (%dX%s)\n", 215 return sprintf(buf, "%d%s Gb/sec (%dX%s)\n",
198 rate / 10, rate % 10 ? ".5" : "", 216 rate, (attr.active_speed == 1) ? ".5" : "",
199 ib_width_enum_to_int(attr.active_width), speed); 217 ib_width_enum_to_int(attr.active_width), speed);
200} 218}
201 219
diff --git a/drivers/infiniband/core/verbs.c b/drivers/infiniband/core/verbs.c
index af7a8b08b2e9..2abed810d8d5 100644
--- a/drivers/infiniband/core/verbs.c
+++ b/drivers/infiniband/core/verbs.c
@@ -77,6 +77,31 @@ enum ib_rate mult_to_ib_rate(int mult)
77} 77}
78EXPORT_SYMBOL(mult_to_ib_rate); 78EXPORT_SYMBOL(mult_to_ib_rate);
79 79
80int ib_rate_to_mbps(enum ib_rate rate)
81{
82 switch (rate) {
83 case IB_RATE_2_5_GBPS: return 2500;
84 case IB_RATE_5_GBPS: return 5000;
85 case IB_RATE_10_GBPS: return 10000;
86 case IB_RATE_20_GBPS: return 20000;
87 case IB_RATE_30_GBPS: return 30000;
88 case IB_RATE_40_GBPS: return 40000;
89 case IB_RATE_60_GBPS: return 60000;
90 case IB_RATE_80_GBPS: return 80000;
91 case IB_RATE_120_GBPS: return 120000;
92 case IB_RATE_14_GBPS: return 14062;
93 case IB_RATE_56_GBPS: return 56250;
94 case IB_RATE_112_GBPS: return 112500;
95 case IB_RATE_168_GBPS: return 168750;
96 case IB_RATE_25_GBPS: return 25781;
97 case IB_RATE_100_GBPS: return 103125;
98 case IB_RATE_200_GBPS: return 206250;
99 case IB_RATE_300_GBPS: return 309375;
100 default: return -1;
101 }
102}
103EXPORT_SYMBOL(ib_rate_to_mbps);
104
80enum rdma_transport_type 105enum rdma_transport_type
81rdma_node_get_transport(enum rdma_node_type node_type) 106rdma_node_get_transport(enum rdma_node_type node_type)
82{ 107{
diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
index 228be3e220d9..97c98c0d89b1 100644
--- a/include/rdma/ib_verbs.h
+++ b/include/rdma/ib_verbs.h
@@ -207,6 +207,7 @@ enum ib_port_cap_flags {
207 IB_PORT_SM_DISABLED = 1 << 10, 207 IB_PORT_SM_DISABLED = 1 << 10,
208 IB_PORT_SYS_IMAGE_GUID_SUP = 1 << 11, 208 IB_PORT_SYS_IMAGE_GUID_SUP = 1 << 11,
209 IB_PORT_PKEY_SW_EXT_PORT_TRAP_SUP = 1 << 12, 209 IB_PORT_PKEY_SW_EXT_PORT_TRAP_SUP = 1 << 12,
210 IB_PORT_EXTENDED_SPEEDS_SUP = 1 << 14,
210 IB_PORT_CM_SUP = 1 << 16, 211 IB_PORT_CM_SUP = 1 << 16,
211 IB_PORT_SNMP_TUNNEL_SUP = 1 << 17, 212 IB_PORT_SNMP_TUNNEL_SUP = 1 << 17,
212 IB_PORT_REINIT_SUP = 1 << 18, 213 IB_PORT_REINIT_SUP = 1 << 18,
@@ -415,7 +416,15 @@ enum ib_rate {
415 IB_RATE_40_GBPS = 7, 416 IB_RATE_40_GBPS = 7,
416 IB_RATE_60_GBPS = 8, 417 IB_RATE_60_GBPS = 8,
417 IB_RATE_80_GBPS = 9, 418 IB_RATE_80_GBPS = 9,
418 IB_RATE_120_GBPS = 10 419 IB_RATE_120_GBPS = 10,
420 IB_RATE_14_GBPS = 11,
421 IB_RATE_56_GBPS = 12,
422 IB_RATE_112_GBPS = 13,
423 IB_RATE_168_GBPS = 14,
424 IB_RATE_25_GBPS = 15,
425 IB_RATE_100_GBPS = 16,
426 IB_RATE_200_GBPS = 17,
427 IB_RATE_300_GBPS = 18
419}; 428};
420 429
421/** 430/**
@@ -427,6 +436,13 @@ enum ib_rate {
427int ib_rate_to_mult(enum ib_rate rate) __attribute_const__; 436int ib_rate_to_mult(enum ib_rate rate) __attribute_const__;
428 437
429/** 438/**
439 * ib_rate_to_mbps - Convert the IB rate enum to Mbps.
440 * For example, IB_RATE_2_5_GBPS will be converted to 2500.
441 * @rate: rate to convert.
442 */
443int ib_rate_to_mbps(enum ib_rate rate) __attribute_const__;
444
445/**
430 * mult_to_ib_rate - Convert a multiple of 2.5 Gbit/sec to an IB rate 446 * mult_to_ib_rate - Convert a multiple of 2.5 Gbit/sec to an IB rate
431 * enum. 447 * enum.
432 * @mult: multiple to convert. 448 * @mult: multiple to convert.