diff options
| -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. |
