net/mlx5: create advanced RxQ via DevX
[dpdk.git] / drivers / net / mlx5 / mlx5_vlan.c
index 67518c2..5f6554a 100644 (file)
@@ -111,7 +111,7 @@ mlx5_vlan_strip_queue_set(struct rte_eth_dev *dev, uint16_t queue, int on)
        uint16_t vlan_offloads =
                (on ? IBV_WQ_FLAGS_CVLAN_STRIPPING : 0) |
                0;
-       int ret;
+       int ret = 0;
 
        /* Validate hw support */
        if (!priv->config.hw_vlan_strip) {
@@ -132,15 +132,27 @@ mlx5_vlan_strip_queue_set(struct rte_eth_dev *dev, uint16_t queue, int on)
                rxq->vlan_strip = !!on;
                return;
        }
-       mod = (struct ibv_wq_attr){
-               .attr_mask = IBV_WQ_ATTR_FLAGS,
-               .flags_mask = IBV_WQ_FLAGS_CVLAN_STRIPPING,
-               .flags = vlan_offloads,
-       };
-       ret = mlx5_glue->modify_wq(rxq_ctrl->obj->wq, &mod);
+       if (rxq_ctrl->obj->type == MLX5_RXQ_OBJ_TYPE_IBV) {
+               mod = (struct ibv_wq_attr){
+                       .attr_mask = IBV_WQ_ATTR_FLAGS,
+                       .flags_mask = IBV_WQ_FLAGS_CVLAN_STRIPPING,
+                       .flags = vlan_offloads,
+               };
+               ret = mlx5_glue->modify_wq(rxq_ctrl->obj->wq, &mod);
+       } else if (rxq_ctrl->obj->type == MLX5_RXQ_OBJ_TYPE_DEVX_RQ) {
+               struct mlx5_devx_modify_rq_attr rq_attr;
+
+               memset(&rq_attr, 0, sizeof(rq_attr));
+               rq_attr.rq_state = MLX5_RQC_STATE_RDY;
+               rq_attr.state = MLX5_RQC_STATE_RDY;
+               rq_attr.vsd = (on ? 0 : 1);
+               rq_attr.modify_bitmask = MLX5_MODIFY_RQ_IN_MODIFY_BITMASK_VSD;
+               ret = mlx5_devx_cmd_modify_rq(rxq_ctrl->obj->rq, &rq_attr);
+       }
        if (ret) {
-               DRV_LOG(ERR, "port %u failed to modified stripping mode: %s",
-                       dev->data->port_id, strerror(rte_errno));
+               DRV_LOG(ERR, "port %u failed to modify object %d stripping "
+                       "mode: %s", dev->data->port_id,
+                       rxq_ctrl->obj->type, strerror(rte_errno));
                return;
        }
        /* Update related bits in RX queue. */