Skip to content

Commit

Permalink
IB: Use central enum for speed instead of hard-coded values
Browse files Browse the repository at this point in the history
The kernel IB stack uses one enumeration for IB speed, which wasn't
explicitly specified in the verbs header file.  Add that enum, and use
it all over the code.

The IB speed/width notation is also used by iWARP and IBoE HW drivers,
which use the convention of rate = speed * width to advertise their
port link rate.

Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
  • Loading branch information
Or Gerlitz authored and Roland Dreier committed Mar 5, 2012
1 parent e9319b0 commit 2e96691
Show file tree
Hide file tree
Showing 8 changed files with 25 additions and 17 deletions.
13 changes: 6 additions & 7 deletions drivers/infiniband/core/sysfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -187,27 +187,26 @@ static ssize_t rate_show(struct ib_port *p, struct port_attribute *unused,
return ret;

switch (attr.active_speed) {
case 1:
/* SDR */
case IB_SPEED_SDR:
rate = 25;
break;
case 2:
case IB_SPEED_DDR:
speed = " DDR";
rate = 50;
break;
case 4:
case IB_SPEED_QDR:
speed = " QDR";
rate = 100;
break;
case 8:
case IB_SPEED_FDR10:
speed = " FDR10";
rate = 100;
break;
case 16:
case IB_SPEED_FDR:
speed = " FDR";
rate = 140;
break;
case 32:
case IB_SPEED_EDR:
speed = " EDR";
rate = 250;
break;
Expand Down
2 changes: 1 addition & 1 deletion drivers/infiniband/hw/amso1100/c2_provider.c
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ static int c2_query_port(struct ib_device *ibdev,
props->pkey_tbl_len = 1;
props->qkey_viol_cntr = 0;
props->active_width = 1;
props->active_speed = 1;
props->active_speed = IB_SPEED_SDR;

return 0;
}
Expand Down
2 changes: 1 addition & 1 deletion drivers/infiniband/hw/cxgb3/iwch_provider.c
Original file line number Diff line number Diff line change
Expand Up @@ -1227,7 +1227,7 @@ static int iwch_query_port(struct ib_device *ibdev,
props->gid_tbl_len = 1;
props->pkey_tbl_len = 1;
props->active_width = 2;
props->active_speed = 2;
props->active_speed = IB_SPEED_DDR;
props->max_msg_sz = -1;

return 0;
Expand Down
2 changes: 1 addition & 1 deletion drivers/infiniband/hw/cxgb4/provider.c
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,7 @@ static int c4iw_query_port(struct ib_device *ibdev, u8 port,
props->gid_tbl_len = 1;
props->pkey_tbl_len = 1;
props->active_width = 2;
props->active_speed = 2;
props->active_speed = IB_SPEED_DDR;
props->max_msg_sz = -1;

return 0;
Expand Down
2 changes: 1 addition & 1 deletion drivers/infiniband/hw/ehca/ehca_hca.c
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@ int ehca_query_port(struct ib_device *ibdev,
props->phys_state = 5;
props->state = rblock->state;
props->active_width = IB_WIDTH_12X;
props->active_speed = 0x1;
props->active_speed = IB_SPEED_SDR;
}

query_port1:
Expand Down
10 changes: 5 additions & 5 deletions drivers/infiniband/hw/mlx4/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -215,16 +215,16 @@ static int ib_link_query_port(struct ib_device *ibdev, u8 port,

switch (ext_active_speed) {
case 1:
props->active_speed = 16; /* FDR */
props->active_speed = IB_SPEED_FDR;
break;
case 2:
props->active_speed = 32; /* EDR */
props->active_speed = IB_SPEED_EDR;
break;
}
}

/* If reported active speed is QDR, check if is FDR-10 */
if (props->active_speed == 4) {
if (props->active_speed == IB_SPEED_QDR) {
if (to_mdev(ibdev)->dev->caps.ext_port_cap[port] &
MLX_EXT_PORT_CAP_FLAG_EXTENDED_PORT_INFO) {
init_query_mad(in_mad);
Expand All @@ -238,7 +238,7 @@ static int ib_link_query_port(struct ib_device *ibdev, u8 port,

/* Checking LinkSpeedActive for FDR-10 */
if (out_mad->data[15] & 0x1)
props->active_speed = 8;
props->active_speed = IB_SPEED_FDR10;
}
}

Expand All @@ -259,7 +259,7 @@ static int eth_link_query_port(struct ib_device *ibdev, u8 port,
enum ib_mtu tmp;

props->active_width = IB_WIDTH_1X;
props->active_speed = 4;
props->active_speed = IB_SPEED_QDR;
props->port_cap_flags = IB_PORT_CM_SUP;
props->gid_tbl_len = to_mdev(ibdev)->dev->caps.gid_table_len[port];
props->max_msg_sz = to_mdev(ibdev)->dev->caps.max_msg_sz;
Expand Down
2 changes: 1 addition & 1 deletion drivers/infiniband/hw/nes/nes_verbs.c
Original file line number Diff line number Diff line change
Expand Up @@ -597,7 +597,7 @@ static int nes_query_port(struct ib_device *ibdev, u8 port, struct ib_port_attr
props->pkey_tbl_len = 1;
props->qkey_viol_cntr = 0;
props->active_width = IB_WIDTH_4X;
props->active_speed = 1;
props->active_speed = IB_SPEED_SDR;
props->max_msg_sz = 0x80000000;

return 0;
Expand Down
9 changes: 9 additions & 0 deletions include/rdma/ib_verbs.h
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,15 @@ static inline int ib_width_enum_to_int(enum ib_port_width width)
}
}

enum ib_port_speed {
IB_SPEED_SDR = 1,
IB_SPEED_DDR = 2,
IB_SPEED_QDR = 4,
IB_SPEED_FDR10 = 8,
IB_SPEED_FDR = 16,
IB_SPEED_EDR = 32
};

struct ib_protocol_stats {
/* TBD... */
};
Expand Down

0 comments on commit 2e96691

Please sign in to comment.