net/mlx5: unify operations for all OS
[dpdk.git] / drivers / net / mlx5 / windows / mlx5_os.c
index d2ac02c..4fbd889 100644 (file)
@@ -571,7 +571,7 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev,
        /* Initialize burst functions to prevent crashes before link-up. */
        eth_dev->rx_pkt_burst = removed_rx_burst;
        eth_dev->tx_pkt_burst = removed_tx_burst;
-       eth_dev->dev_ops = &mlx5_os_dev_ops;
+       eth_dev->dev_ops = &mlx5_dev_ops;
        eth_dev->rx_descriptor_status = mlx5_rx_descriptor_status;
        eth_dev->tx_descriptor_status = mlx5_tx_descriptor_status;
        eth_dev->rx_queue_count = mlx5_rx_queue_count;
@@ -870,6 +870,68 @@ mlx5_os_set_allmulti(struct rte_eth_dev *dev, int enable)
        return -ENOTSUP;
 }
 
+/**
+ * Detect if a devx_device_bdf object has identical DBDF values to the
+ * rte_pci_addr found in bus/pci probing
+ *
+ * @param[in] devx_bdf
+ *   Pointer to the devx_device_bdf structure.
+ * @param[in] addr
+ *   Pointer to the rte_pci_addr structure.
+ *
+ * @return
+ *   1 on Device match, 0 on mismatch.
+ */
+static int
+mlx5_match_devx_bdf_to_addr(struct devx_device_bdf *devx_bdf,
+                           struct rte_pci_addr *addr)
+{
+       if (addr->domain != (devx_bdf->bus_id >> 8) ||
+           addr->bus != (devx_bdf->bus_id & 0xff) ||
+           addr->devid != devx_bdf->dev_id ||
+           addr->function != devx_bdf->fnc_id) {
+               return 0;
+       }
+       return 1;
+}
+
+/**
+ * Detect if a devx_device_bdf object matches the rte_pci_addr
+ * found in bus/pci probing
+ * Compare both the Native/PF BDF and the raw_bdf representing a VF BDF.
+ *
+ * @param[in] devx_bdf
+ *   Pointer to the devx_device_bdf structure.
+ * @param[in] addr
+ *   Pointer to the rte_pci_addr structure.
+ *
+ * @return
+ *   1 on Device match, 0 on mismatch, rte_errno code on failure.
+ */
+static int
+mlx5_match_devx_devices_to_addr(struct devx_device_bdf *devx_bdf,
+                               struct rte_pci_addr *addr)
+{
+       int err;
+       struct devx_device mlx5_dev;
+
+       if (mlx5_match_devx_bdf_to_addr(devx_bdf, addr))
+               return 1;
+       /**
+        * Didn't match on Native/PF BDF, could still
+        * Match a VF BDF, check it next
+        */
+       err = mlx5_glue->query_device(devx_bdf, &mlx5_dev);
+       if (err) {
+               DRV_LOG(ERR, "query_device failed");
+               rte_errno = err;
+               return rte_errno;
+       }
+       if (mlx5_match_devx_bdf_to_addr(&mlx5_dev.raw_bdf, addr))
+               return 1;
+       return 0;
+}
+
 /**
  * DPDK callback to register a PCI device.
  *
@@ -917,7 +979,7 @@ mlx5_os_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
        struct mlx5_dev_spawn_data *list = NULL;
        struct mlx5_dev_config dev_config;
        unsigned int dev_config_vf;
-       int ret;
+       int ret, err;
        uint32_t restore;
 
        if (rte_eal_process_type() == RTE_PROC_SECONDARY) {
@@ -945,13 +1007,16 @@ mlx5_os_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
        struct devx_device_bdf *devx_bdf_match[ret + 1];
 
        while (ret-- > 0) {
-               if (pci_dev->addr.bus != devx_bdf_devs->bus_id ||
-                   pci_dev->addr.devid != devx_bdf_devs->dev_id ||
-                   pci_dev->addr.function != devx_bdf_devs->fnc_id) {
+               err = mlx5_match_devx_devices_to_addr(devx_bdf_devs,
+                   &pci_dev->addr);
+               if (!err) {
                        devx_bdf_devs++;
                        continue;
                }
-
+               if (err != 1) {
+                       ret = -err;
+                       goto exit;
+               }
                devx_bdf_match[nd++] = devx_bdf_devs;
        }
        devx_bdf_match[nd] = NULL;
@@ -1091,111 +1156,3 @@ mlx5_os_get_pdn(void *pd, uint32_t *pdn)
 }
 
 const struct mlx5_flow_driver_ops mlx5_flow_verbs_drv_ops = {0};
-
-const struct eth_dev_ops mlx5_os_dev_ops = {
-       .dev_configure = mlx5_dev_configure,
-       .dev_start = mlx5_dev_start,
-       .dev_stop = mlx5_dev_stop,
-       .dev_close = mlx5_dev_close,
-       .mtu_set = mlx5_dev_set_mtu,
-       .link_update = mlx5_link_update,
-       .stats_get = mlx5_stats_get,
-       .stats_reset = mlx5_stats_reset,
-       .dev_infos_get = mlx5_dev_infos_get,
-       .dev_supported_ptypes_get = mlx5_dev_supported_ptypes_get,
-       .promiscuous_enable = mlx5_promiscuous_enable,
-       .promiscuous_disable = mlx5_promiscuous_disable,
-       .allmulticast_enable = mlx5_allmulticast_enable,
-       .allmulticast_disable = mlx5_allmulticast_disable,
-       .xstats_get = mlx5_xstats_get,
-       .xstats_reset = mlx5_xstats_reset,
-       .xstats_get_names = mlx5_xstats_get_names,
-       .fw_version_get = mlx5_fw_version_get,
-       .read_clock = mlx5_read_clock,
-       .vlan_filter_set = mlx5_vlan_filter_set,
-       .rx_queue_setup = mlx5_rx_queue_setup,
-       .rx_hairpin_queue_setup = mlx5_rx_hairpin_queue_setup,
-       .tx_queue_setup = mlx5_tx_queue_setup,
-       .tx_hairpin_queue_setup = mlx5_tx_hairpin_queue_setup,
-       .rx_queue_release = mlx5_rx_queue_release,
-       .tx_queue_release = mlx5_tx_queue_release,
-       .flow_ctrl_get = mlx5_dev_get_flow_ctrl,
-       .flow_ctrl_set = mlx5_dev_set_flow_ctrl,
-       .mac_addr_remove = mlx5_mac_addr_remove,
-       .mac_addr_add = mlx5_mac_addr_add,
-       .mac_addr_set = mlx5_mac_addr_set,
-       .set_mc_addr_list = mlx5_set_mc_addr_list,
-       .vlan_strip_queue_set = mlx5_vlan_strip_queue_set,
-       .vlan_offload_set = mlx5_vlan_offload_set,
-       .reta_update = mlx5_dev_rss_reta_update,
-       .reta_query = mlx5_dev_rss_reta_query,
-       .rss_hash_update = mlx5_rss_hash_update,
-       .rss_hash_conf_get = mlx5_rss_hash_conf_get,
-       .filter_ctrl = mlx5_dev_filter_ctrl,
-       .rxq_info_get = mlx5_rxq_info_get,
-       .txq_info_get = mlx5_txq_info_get,
-       .rx_burst_mode_get = mlx5_rx_burst_mode_get,
-       .tx_burst_mode_get = mlx5_tx_burst_mode_get,
-       .rx_queue_intr_enable = mlx5_rx_intr_enable,
-       .rx_queue_intr_disable = mlx5_rx_intr_disable,
-       .is_removed = mlx5_is_removed,
-       .udp_tunnel_port_add  = mlx5_udp_tunnel_port_add,
-       .get_module_info = mlx5_get_module_info,
-       .get_module_eeprom = mlx5_get_module_eeprom,
-       .hairpin_cap_get = mlx5_hairpin_cap_get,
-       .mtr_ops_get = mlx5_flow_meter_ops_get,
-};
-
-/* Available operations from secondary process. */
-const struct eth_dev_ops mlx5_os_dev_sec_ops = {0};
-
-/* Available operations in flow isolated mode. */
-const struct eth_dev_ops mlx5_os_dev_ops_isolate = {
-       .dev_configure = mlx5_dev_configure,
-       .dev_start = mlx5_dev_start,
-       .dev_stop = mlx5_dev_stop,
-       .dev_close = mlx5_dev_close,
-       .mtu_set = mlx5_dev_set_mtu,
-       .link_update = mlx5_link_update,
-       .stats_get = mlx5_stats_get,
-       .stats_reset = mlx5_stats_reset,
-       .dev_infos_get = mlx5_dev_infos_get,
-       .dev_set_link_down = mlx5_set_link_down,
-       .dev_set_link_up = mlx5_set_link_up,
-       .promiscuous_enable = mlx5_promiscuous_enable,
-       .promiscuous_disable = mlx5_promiscuous_disable,
-       .allmulticast_enable = mlx5_allmulticast_enable,
-       .allmulticast_disable = mlx5_allmulticast_disable,
-       .xstats_get = mlx5_xstats_get,
-       .xstats_reset = mlx5_xstats_reset,
-       .xstats_get_names = mlx5_xstats_get_names,
-       .fw_version_get = mlx5_fw_version_get,
-       .dev_supported_ptypes_get = mlx5_dev_supported_ptypes_get,
-       .vlan_filter_set = mlx5_vlan_filter_set,
-       .rx_queue_setup = mlx5_rx_queue_setup,
-       .rx_hairpin_queue_setup = mlx5_rx_hairpin_queue_setup,
-       .tx_queue_setup = mlx5_tx_queue_setup,
-       .tx_hairpin_queue_setup = mlx5_tx_hairpin_queue_setup,
-       .rx_queue_release = mlx5_rx_queue_release,
-       .tx_queue_release = mlx5_tx_queue_release,
-       .flow_ctrl_get = mlx5_dev_get_flow_ctrl,
-       .flow_ctrl_set = mlx5_dev_set_flow_ctrl,
-       .mac_addr_remove = mlx5_mac_addr_remove,
-       .mac_addr_add = mlx5_mac_addr_add,
-       .mac_addr_set = mlx5_mac_addr_set,
-       .set_mc_addr_list = mlx5_set_mc_addr_list,
-       .vlan_strip_queue_set = mlx5_vlan_strip_queue_set,
-       .vlan_offload_set = mlx5_vlan_offload_set,
-       .filter_ctrl = mlx5_dev_filter_ctrl,
-       .rxq_info_get = mlx5_rxq_info_get,
-       .txq_info_get = mlx5_txq_info_get,
-       .rx_burst_mode_get = mlx5_rx_burst_mode_get,
-       .tx_burst_mode_get = mlx5_tx_burst_mode_get,
-       .rx_queue_intr_enable = mlx5_rx_intr_enable,
-       .rx_queue_intr_disable = mlx5_rx_intr_disable,
-       .is_removed = mlx5_is_removed,
-       .get_module_info = mlx5_get_module_info,
-       .get_module_eeprom = mlx5_get_module_eeprom,
-       .hairpin_cap_get = mlx5_hairpin_cap_get,
-       .mtr_ops_get = mlx5_flow_meter_ops_get,
-};