net/mlx5: add C++ include guard to public header
[dpdk.git] / drivers / net / mlx5 / linux / mlx5_os.c
index b41bcea..aecdc5a 100644 (file)
@@ -112,7 +112,7 @@ static struct mlx5_indexed_pool_config icfg[] = {
  *   Pointer to RQ channel object, which includes the channel fd
  *
  * @param[out] fd
- *   The file descriptor (representing the intetrrupt) used in this channel.
+ *   The file descriptor (representing the interrupt) used in this channel.
  *
  * @return
  *   0 on successfully setting the fd to non-blocking, non-zero otherwise.
@@ -337,6 +337,16 @@ mlx5_alloc_shared_dr(struct mlx5_priv *priv)
                                              flow_dv_dest_array_clone_free_cb);
        if (!sh->dest_array_list)
                goto error;
+       /* Init shared flex parsers list, no need lcore_share */
+       snprintf(s, sizeof(s), "%s_flex_parsers_list", sh->ibdev_name);
+       sh->flex_parsers_dv = mlx5_list_create(s, sh, false,
+                                              mlx5_flex_parser_create_cb,
+                                              mlx5_flex_parser_match_cb,
+                                              mlx5_flex_parser_remove_cb,
+                                              mlx5_flex_parser_clone_cb,
+                                              mlx5_flex_parser_clone_free_cb);
+       if (!sh->flex_parsers_dv)
+               goto error;
 #endif
 #ifdef HAVE_MLX5DV_DR
        void *domain;
@@ -410,6 +420,7 @@ mlx5_alloc_shared_dr(struct mlx5_priv *priv)
                        mlx5_glue->dr_create_flow_action_default_miss();
        if (!sh->default_miss_action)
                DRV_LOG(WARNING, "Default miss action is not supported.");
+       LIST_INIT(&sh->shared_rxqs);
        return 0;
 error:
        /* Rollback the created objects. */
@@ -484,6 +495,7 @@ mlx5_os_free_shared_dr(struct mlx5_priv *priv)
        MLX5_ASSERT(sh && sh->refcnt);
        if (sh->refcnt > 1)
                return;
+       MLX5_ASSERT(LIST_EMPTY(&sh->shared_rxqs));
 #ifdef HAVE_MLX5DV_DR
        if (sh->rx_domain) {
                mlx5_glue->dr_destroy_domain(sh->rx_domain);
@@ -869,10 +881,6 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev,
        unsigned int mpls_en = 0;
        unsigned int swp = 0;
        unsigned int mprq = 0;
-       unsigned int mprq_min_stride_size_n = 0;
-       unsigned int mprq_max_stride_size_n = 0;
-       unsigned int mprq_min_stride_num_n = 0;
-       unsigned int mprq_max_stride_num_n = 0;
        struct rte_ether_addr mac;
        char name[RTE_ETH_NAME_MAX_LEN];
        int own_domain_id = 0;
@@ -1027,15 +1035,17 @@ err_secondary:
                        mprq_caps.max_single_wqe_log_num_of_strides);
                DRV_LOG(DEBUG, "\tsupported_qpts: %d",
                        mprq_caps.supported_qpts);
+               DRV_LOG(DEBUG, "\tmin_stride_wqe_log_size: %d",
+                       config->mprq.log_min_stride_wqe_size);
                DRV_LOG(DEBUG, "device supports Multi-Packet RQ");
                mprq = 1;
-               mprq_min_stride_size_n =
+               config->mprq.log_min_stride_size =
                        mprq_caps.min_single_stride_log_num_of_bytes;
-               mprq_max_stride_size_n =
+               config->mprq.log_max_stride_size =
                        mprq_caps.max_single_stride_log_num_of_bytes;
-               mprq_min_stride_num_n =
+               config->mprq.log_min_stride_num =
                        mprq_caps.min_single_wqe_log_num_of_strides;
-               mprq_max_stride_num_n =
+               config->mprq.log_max_stride_num =
                        mprq_caps.max_single_wqe_log_num_of_strides;
        }
 #endif
@@ -1496,6 +1506,15 @@ err_secondary:
                goto error;
 #endif
        }
+       if (config->std_delay_drop || config->hp_delay_drop) {
+               if (!config->hca_attr.rq_delay_drop) {
+                       config->std_delay_drop = 0;
+                       config->hp_delay_drop = 0;
+                       DRV_LOG(WARNING,
+                               "dev_port-%u: Rxq delay drop is not supported",
+                               priv->dev_port);
+               }
+       }
        if (sh->devx) {
                uint32_t reg[MLX5_ST_SZ_DW(register_mtutc)];
 
@@ -1527,36 +1546,7 @@ err_secondary:
                config->hw_fcs_strip = 0;
        DRV_LOG(DEBUG, "FCS stripping configuration is %ssupported",
                (config->hw_fcs_strip ? "" : "not "));
-       if (config->mprq.enabled && mprq) {
-               if (config->mprq.stride_num_n &&
-                   (config->mprq.stride_num_n > mprq_max_stride_num_n ||
-                    config->mprq.stride_num_n < mprq_min_stride_num_n)) {
-                       config->mprq.stride_num_n =
-                               RTE_MIN(RTE_MAX(MLX5_MPRQ_STRIDE_NUM_N,
-                                               mprq_min_stride_num_n),
-                                       mprq_max_stride_num_n);
-                       DRV_LOG(WARNING,
-                               "the number of strides"
-                               " for Multi-Packet RQ is out of range,"
-                               " setting default value (%u)",
-                               1 << config->mprq.stride_num_n);
-               }
-               if (config->mprq.stride_size_n &&
-                   (config->mprq.stride_size_n > mprq_max_stride_size_n ||
-                    config->mprq.stride_size_n < mprq_min_stride_size_n)) {
-                       config->mprq.stride_size_n =
-                               RTE_MIN(RTE_MAX(MLX5_MPRQ_STRIDE_SIZE_N,
-                                               mprq_min_stride_size_n),
-                                       mprq_max_stride_size_n);
-                       DRV_LOG(WARNING,
-                               "the size of a stride"
-                               " for Multi-Packet RQ is out of range,"
-                               " setting default value (%u)",
-                               1 << config->mprq.stride_size_n);
-               }
-               config->mprq.min_stride_size_n = mprq_min_stride_size_n;
-               config->mprq.max_stride_size_n = mprq_max_stride_size_n;
-       } else if (config->mprq.enabled && !mprq) {
+       if (config->mprq.enabled && !mprq) {
                DRV_LOG(WARNING, "Multi-Packet RQ isn't supported");
                config->mprq.enabled = 0;
        }
@@ -1706,8 +1696,7 @@ err_secondary:
                priv->obj_ops = ibv_obj_ops;
        }
        if (config->tx_pp &&
-           (priv->config.dv_esw_en ||
-            priv->obj_ops.txq_obj_new != mlx5_txq_devx_obj_new)) {
+           priv->obj_ops.txq_obj_new != mlx5_txq_devx_obj_new) {
                /*
                 * HAVE_MLX5DV_DEVX_UAR_OFFSET is required to support
                 * packet pacing and already checked above.
@@ -1723,7 +1712,7 @@ err_secondary:
        priv->drop_queue.hrxq = mlx5_drop_action_create(eth_dev);
        if (!priv->drop_queue.hrxq)
                goto error;
-       /* Port representor shares the same max prioirity with pf port. */
+       /* Port representor shares the same max priority with pf port. */
        if (!priv->sh->flow_priority_check_flag) {
                /* Supported Verbs flow priority number detection. */
                err = mlx5_flow_discover_priorities(eth_dev);
@@ -2048,7 +2037,8 @@ mlx5_device_bond_pci_match(const char *ibdev_name,
 }
 
 static void
-mlx5_os_config_default(struct mlx5_dev_config *config)
+mlx5_os_config_default(struct mlx5_dev_config *config,
+                      struct mlx5_common_dev_config *cconf)
 {
        memset(config, 0, sizeof(*config));
        config->mps = MLX5_ARG_UNSET;
@@ -2060,11 +2050,17 @@ mlx5_os_config_default(struct mlx5_dev_config *config)
        config->vf_nl_en = 1;
        config->mprq.max_memcpy_len = MLX5_MPRQ_MEMCPY_DEFAULT_LEN;
        config->mprq.min_rxqs_num = MLX5_MPRQ_MIN_RXQS;
+       config->mprq.log_min_stride_wqe_size = cconf->devx ?
+                                       cconf->hca_attr.log_min_stride_wqe_sz :
+                                       MLX5_MPRQ_LOG_MIN_STRIDE_WQE_SIZE;
+       config->mprq.log_stride_num = MLX5_MPRQ_DEFAULT_LOG_STRIDE_NUM;
        config->dv_esw_en = 1;
        config->dv_flow_en = 1;
        config->decap_en = 1;
        config->log_hp_size = MLX5_ARG_UNSET;
        config->allow_duplicate_pattern = 1;
+       config->std_delay_drop = 0;
+       config->hp_delay_drop = 0;
 }
 
 /**
@@ -2278,7 +2274,7 @@ mlx5_os_pci_probe_pf(struct mlx5_common_device *cdev,
                                                /*
                                                 * Force standalone bonding
                                                 * device for ROCE LAG
-                                                * confgiurations.
+                                                * configurations.
                                                 */
                                                list[ns].info.master = 0;
                                                list[ns].info.representor = 0;
@@ -2474,7 +2470,7 @@ mlx5_os_pci_probe_pf(struct mlx5_common_device *cdev,
                uint32_t restore;
 
                /* Default configuration. */
-               mlx5_os_config_default(&dev_config);
+               mlx5_os_config_default(&dev_config, &cdev->config);
                dev_config.vf = dev_config_vf;
                list[i].eth_dev = mlx5_dev_spawn(cdev->dev, &list[i],
                                                 &dev_config, &eth_da);
@@ -2615,7 +2611,7 @@ mlx5_os_pci_probe(struct mlx5_common_device *cdev)
                }
                if (ret) {
                        DRV_LOG(ERR, "Probe of PCI device " PCI_PRI_FMT " "
-                               "aborted due to proding failure of PF %u",
+                               "aborted due to prodding failure of PF %u",
                                pci_dev->addr.domain, pci_dev->addr.bus,
                                pci_dev->addr.devid, pci_dev->addr.function,
                                eth_da.ports[p]);
@@ -2644,7 +2640,7 @@ mlx5_os_auxiliary_probe(struct mlx5_common_device *cdev)
        if (ret != 0)
                return ret;
        /* Set default config data. */
-       mlx5_os_config_default(&config);
+       mlx5_os_config_default(&config, &cdev->config);
        config.sf = 1;
        /* Init spawn data. */
        spawn.max_port = 1;