Lines Matching refs:vsi

13  * @vsi: vsi pointer
18 static struct irdma_ws_node *irdma_alloc_node(struct irdma_sc_vsi *vsi,
33 node_index = irdma_alloc_ws_node_id(vsi->dev);
42 node->vsi_index = vsi->vsi_idx;
46 node->traffic_class = vsi->qos[user_pri].traffic_class;
48 node->rel_bw = vsi->qos[user_pri].rel_bw;
52 node->lan_qs_handle = vsi->qos[user_pri].lan_qos_handle;
67 * @vsi: VSI stricture of device
70 static void irdma_free_node(struct irdma_sc_vsi *vsi,
76 irdma_free_ws_node_id(vsi->dev, node->index);
85 * @vsi: vsi pointer
89 static int irdma_ws_cqp_cmd(struct irdma_sc_vsi *vsi,
95 node_info.vsi = node->vsi_index;
106 if (irdma_cqp_ws_node_cmd(vsi->dev, cmd, &node_info)) {
107 ibdev_dbg(to_ibdev(vsi->dev), "WS: CQP WS CMD failed\n");
113 vsi->qos[node->user_pri].qs_handle = node_info.qs_handle;
153 * @vsi: vsi pointer
156 static bool irdma_tc_in_use(struct irdma_sc_vsi *vsi, u8 user_pri)
160 mutex_lock(&vsi->qos[user_pri].qos_mutex);
161 if (!list_empty(&vsi->qos[user_pri].qplist)) {
162 mutex_unlock(&vsi->qos[user_pri].qos_mutex);
170 if (vsi->qos[i].traffic_class == vsi->qos[user_pri].traffic_class &&
171 !list_empty(&vsi->qos[i].qplist)) {
172 mutex_unlock(&vsi->qos[user_pri].qos_mutex);
176 mutex_unlock(&vsi->qos[user_pri].qos_mutex);
183 * @vsi: vsi pointer
186 static void irdma_remove_leaf(struct irdma_sc_vsi *vsi, u8 user_pri)
192 traffic_class = vsi->qos[user_pri].traffic_class;
194 if (vsi->qos[i].traffic_class == traffic_class)
195 vsi->qos[i].valid = false;
197 ws_tree_root = vsi->dev->ws_tree_root;
201 vsi_node = ws_find_node(ws_tree_root, vsi->vsi_idx,
207 vsi->qos[user_pri].traffic_class,
212 irdma_ws_cqp_cmd(vsi, tc_node, IRDMA_OP_WS_DELETE_NODE);
213 vsi->unregister_qset(vsi, tc_node);
215 irdma_free_node(vsi, tc_node);
218 irdma_ws_cqp_cmd(vsi, vsi_node, IRDMA_OP_WS_DELETE_NODE);
220 irdma_free_node(vsi, vsi_node);
223 irdma_ws_cqp_cmd(vsi, ws_tree_root,
225 irdma_free_node(vsi, ws_tree_root);
226 vsi->dev->ws_tree_root = NULL;
233 * @vsi: vsi pointer
236 int irdma_ws_add(struct irdma_sc_vsi *vsi, u8 user_pri)
245 mutex_lock(&vsi->dev->ws_mutex);
246 if (vsi->tc_change_pending) {
251 if (vsi->qos[user_pri].valid)
254 ws_tree_root = vsi->dev->ws_tree_root;
256 ibdev_dbg(to_ibdev(vsi->dev), "WS: Creating root node\n");
257 ws_tree_root = irdma_alloc_node(vsi, user_pri,
264 ret = irdma_ws_cqp_cmd(vsi, ws_tree_root, IRDMA_OP_WS_ADD_NODE);
266 irdma_free_node(vsi, ws_tree_root);
270 vsi->dev->ws_tree_root = ws_tree_root;
274 vsi_node = ws_find_node(ws_tree_root, vsi->vsi_idx,
279 ibdev_dbg(to_ibdev(vsi->dev),
281 vsi->vsi_idx);
282 vsi_node = irdma_alloc_node(vsi, user_pri, WS_NODE_TYPE_PARENT,
289 ret = irdma_ws_cqp_cmd(vsi, vsi_node, IRDMA_OP_WS_ADD_NODE);
291 irdma_free_node(vsi, vsi_node);
298 ibdev_dbg(to_ibdev(vsi->dev),
300 vsi_node->index, vsi->vsi_idx);
301 traffic_class = vsi->qos[user_pri].traffic_class;
306 ibdev_dbg(to_ibdev(vsi->dev),
308 vsi->vsi_idx, traffic_class);
309 tc_node = irdma_alloc_node(vsi, user_pri, WS_NODE_TYPE_LEAF,
316 ret = irdma_ws_cqp_cmd(vsi, tc_node, IRDMA_OP_WS_ADD_NODE);
318 irdma_free_node(vsi, tc_node);
326 ret = vsi->register_qset(vsi, tc_node);
331 ret = irdma_ws_cqp_cmd(vsi, tc_node, IRDMA_OP_WS_MODIFY_NODE);
333 vsi->unregister_qset(vsi, tc_node);
337 ibdev_dbg(to_ibdev(vsi->dev),
339 tc_node->index, vsi->vsi_idx, traffic_class);
345 if (vsi->qos[i].traffic_class == traffic_class) {
346 vsi->qos[i].qs_handle = tc_node->qs_handle;
347 vsi->qos[i].lan_qos_handle = tc_node->lan_qs_handle;
348 vsi->qos[i].l2_sched_node_id = tc_node->l2_sched_node_id;
349 vsi->qos[i].valid = true;
355 irdma_ws_cqp_cmd(vsi, tc_node, IRDMA_OP_WS_DELETE_NODE);
357 irdma_free_node(vsi, tc_node);
360 if (irdma_ws_cqp_cmd(vsi, vsi_node, IRDMA_OP_WS_DELETE_NODE))
363 irdma_free_node(vsi, vsi_node);
369 irdma_ws_cqp_cmd(vsi, ws_tree_root, IRDMA_OP_WS_DELETE_NODE);
370 vsi->dev->ws_tree_root = NULL;
371 irdma_free_node(vsi, ws_tree_root);
375 mutex_unlock(&vsi->dev->ws_mutex);
381 * @vsi: vsi pointer
384 void irdma_ws_remove(struct irdma_sc_vsi *vsi, u8 user_pri)
386 mutex_lock(&vsi->dev->ws_mutex);
387 if (irdma_tc_in_use(vsi, user_pri))
389 irdma_remove_leaf(vsi, user_pri);
391 mutex_unlock(&vsi->dev->ws_mutex);
396 * @vsi: vsi pointer
398 void irdma_ws_reset(struct irdma_sc_vsi *vsi)
402 mutex_lock(&vsi->dev->ws_mutex);
404 irdma_remove_leaf(vsi, i);
405 mutex_unlock(&vsi->dev->ws_mutex);