aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/infiniband/hw/ocrdma/ocrdma_verbs.c')
-rw-r--r--drivers/infiniband/hw/ocrdma/ocrdma_verbs.c43
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
109static 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
109int ocrdma_query_port(struct ib_device *ibdev, 148int 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;