int domain)
  {
        struct mlx5_ib_dev *dev = to_mdev(qp->device);
 +      struct mlx5_ib_qp *mqp = to_mqp(qp);
        struct mlx5_ib_flow_handler *handler = NULL;
        struct mlx5_flow_destination *dst = NULL;
+       struct mlx5_ib_flow_prio *ft_prio_tx = NULL;
        struct mlx5_ib_flow_prio *ft_prio;
        int err;
  
                err = PTR_ERR(ft_prio);
                goto unlock;
        }
+       if (flow_attr->type == IB_FLOW_ATTR_SNIFFER) {
+               ft_prio_tx = get_flow_table(dev, flow_attr, MLX5_IB_FT_TX);
+               if (IS_ERR(ft_prio_tx)) {
+                       err = PTR_ERR(ft_prio_tx);
+                       ft_prio_tx = NULL;
+                       goto destroy_ft;
+               }
+       }
  
        dst->type = MLX5_FLOW_DESTINATION_TYPE_TIR;
 -      dst->tir_num = to_mqp(qp)->raw_packet_qp.rq.tirn;
 +      if (mqp->flags & MLX5_IB_QP_RSS)
 +              dst->tir_num = mqp->rss_qp.tirn;
 +      else
 +              dst->tir_num = mqp->raw_packet_qp.rq.tirn;
  
        if (flow_attr->type == IB_FLOW_ATTR_NORMAL) {
                if (flow_attr->flags & IB_FLOW_ATTR_FLAGS_DONT_TRAP)  {
 
        unsigned int ofldq_wr_cred;
        bool ulptx_memwrite_dsgl;          /* use of T5 DSGL allowed */
  
 +      unsigned int nsched_cls;          /* number of traffic classes */
        unsigned int max_ordird_qp;       /* Max read depth per RDMA QP */
        unsigned int max_ird_adapter;     /* Max read depth per adapter */
+       bool fr_nsmr_tpte_wr_support;     /* FW support for FR_NSMR_TPTE_WR */
  };
  
  /* State needed to monitor the forward progress of SGE Ingress DMA activities
 
        lld->max_ird_adapter = adap->params.max_ird_adapter;
        lld->ulptx_memwrite_dsgl = adap->params.ulptx_memwrite_dsgl;
        lld->nodeid = dev_to_node(adap->pdev_dev);
++      lld->fr_nsmr_tpte_wr_support = adap->params.fr_nsmr_tpte_wr_support;
  }
  
  static void uld_attach(struct adapter *adap, unsigned int uld)
 
                [32] = "Loopback source checks support",
                [33] = "RoCEv2 support",
                [34] = "DMFS Sniffer support (UC & MC)",
 +              [35] = "QinQ VST mode support",
+               [36] = "sl to vl mapping table change event support"
        };
        int i;
  
 
        MLX4_DEV_CAP_FLAG2_ROCE_V1_V2           = 1ULL <<  33,
        MLX4_DEV_CAP_FLAG2_DMFS_UC_MC_SNIFFER   = 1ULL <<  34,
        MLX4_DEV_CAP_FLAG2_DIAG_PER_PORT        = 1ULL <<  35,
 -      MLX4_DEV_CAP_FLAG2_SL_TO_VL_CHANGE_EVENT = 1ULL << 36,
 +      MLX4_DEV_CAP_FLAG2_SVLAN_BY_QP          = 1ULL <<  36,
++      MLX4_DEV_CAP_FLAG2_SL_TO_VL_CHANGE_EVENT = 1ULL << 37,
  };
  
  enum {