diff options
Diffstat (limited to 'drivers/infiniband/hw/ocrdma/ocrdma_verbs.c')
-rw-r--r-- | drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | 43 |
1 files changed, 41 insertions, 2 deletions
diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c b/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c index e934073e7052..f09a9403b600 100644 --- a/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c +++ b/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | |||
@@ -106,6 +106,45 @@ int ocrdma_query_device(struct ib_device *ibdev, struct ib_device_attr *attr) | |||
106 | return 0; | 106 | return 0; |
107 | } | 107 | } |
108 | 108 | ||
109 | static inline void get_link_speed_and_width(struct ocrdma_dev *dev, | ||
110 | u8 *ib_speed, u8 *ib_width) | ||
111 | { | ||
112 | int status; | ||
113 | u8 speed; | ||
114 | |||
115 | status = ocrdma_mbx_get_link_speed(dev, &speed); | ||
116 | if (status) | ||
117 | speed = OCRDMA_PHYS_LINK_SPEED_ZERO; | ||
118 | |||
119 | switch (speed) { | ||
120 | case OCRDMA_PHYS_LINK_SPEED_1GBPS: | ||
121 | *ib_speed = IB_SPEED_SDR; | ||
122 | *ib_width = IB_WIDTH_1X; | ||
123 | break; | ||
124 | |||
125 | case OCRDMA_PHYS_LINK_SPEED_10GBPS: | ||
126 | *ib_speed = IB_SPEED_QDR; | ||
127 | *ib_width = IB_WIDTH_1X; | ||
128 | break; | ||
129 | |||
130 | case OCRDMA_PHYS_LINK_SPEED_20GBPS: | ||
131 | *ib_speed = IB_SPEED_DDR; | ||
132 | *ib_width = IB_WIDTH_4X; | ||
133 | break; | ||
134 | |||
135 | case OCRDMA_PHYS_LINK_SPEED_40GBPS: | ||
136 | *ib_speed = IB_SPEED_QDR; | ||
137 | *ib_width = IB_WIDTH_4X; | ||
138 | break; | ||
139 | |||
140 | default: | ||
141 | /* Unsupported */ | ||
142 | *ib_speed = IB_SPEED_SDR; | ||
143 | *ib_width = IB_WIDTH_1X; | ||
144 | }; | ||
145 | } | ||
146 | |||
147 | |||
109 | int ocrdma_query_port(struct ib_device *ibdev, | 148 | int ocrdma_query_port(struct ib_device *ibdev, |
110 | u8 port, struct ib_port_attr *props) | 149 | u8 port, struct ib_port_attr *props) |
111 | { | 150 | { |
@@ -142,8 +181,8 @@ int ocrdma_query_port(struct ib_device *ibdev, | |||
142 | props->pkey_tbl_len = 1; | 181 | props->pkey_tbl_len = 1; |
143 | props->bad_pkey_cntr = 0; | 182 | props->bad_pkey_cntr = 0; |
144 | props->qkey_viol_cntr = 0; | 183 | props->qkey_viol_cntr = 0; |
145 | props->active_width = IB_WIDTH_1X; | 184 | get_link_speed_and_width(dev, &props->active_speed, |
146 | props->active_speed = 4; | 185 | &props->active_width); |
147 | props->max_msg_sz = 0x80000000; | 186 | props->max_msg_sz = 0x80000000; |
148 | props->max_vl_num = 4; | 187 | props->max_vl_num = 4; |
149 | return 0; | 188 | return 0; |