diff options
author | Marcel Apfelbaum <marcela@dev.mellanox.co.il> | 2011-10-05 07:21:47 -0400 |
---|---|---|
committer | Roland Dreier <roland@purestorage.com> | 2011-10-11 14:53:47 -0400 |
commit | 71eeba161d7611238ecb6f525a82325aa35339f0 (patch) | |
tree | 97e4a2b1cf8754029ef0755cd67d1502659e2af1 | |
parent | 976d167615b64e14bc1491ca51d424e2ba9a5e84 (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.c | 26 | ||||
-rw-r--r-- | drivers/infiniband/core/verbs.c | 25 | ||||
-rw-r--r-- | include/rdma/ib_verbs.h | 18 |
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 | } |
78 | EXPORT_SYMBOL(mult_to_ib_rate); | 78 | EXPORT_SYMBOL(mult_to_ib_rate); |
79 | 79 | ||
80 | int 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 | } | ||
103 | EXPORT_SYMBOL(ib_rate_to_mbps); | ||
104 | |||
80 | enum rdma_transport_type | 105 | enum rdma_transport_type |
81 | rdma_node_get_transport(enum rdma_node_type node_type) | 106 | rdma_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 { | |||
427 | int ib_rate_to_mult(enum ib_rate rate) __attribute_const__; | 436 | int 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 | */ | ||
443 | int 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. |