net/txgbe: add Rx and Tx init
[dpdk.git] / drivers / net / ice / ice_dcf_parent.c
index d4b4ede..30ead4c 100644 (file)
@@ -45,7 +45,7 @@ ice_dcf_update_vsi_ctx(struct ice_hw *hw, uint16_t vsi_handle,
                        VIRTCHNL_DCF_VF_VSI_ID_S;
 
                /* Redirect rules if vsi mapping table changes. */
-               if (!first_update && vsi_ctx->vsi_num != new_vsi_num) {
+               if (!first_update) {
                        struct ice_flow_redirect rd;
 
                        memset(&rd, 0, sizeof(struct ice_flow_redirect));
@@ -78,6 +78,35 @@ ice_dcf_update_vf_vsi_map(struct ice_hw *hw, uint16_t num_vfs,
                ice_dcf_update_vsi_ctx(hw, vf_id, vf_vsi_map[vf_id]);
 }
 
+static void
+ice_dcf_update_pf_vsi_map(struct ice_hw *hw, uint16_t pf_vsi_idx,
+                       uint16_t pf_vsi_num)
+{
+       struct ice_vsi_ctx *vsi_ctx;
+
+       if (unlikely(pf_vsi_idx >= ICE_MAX_VSI)) {
+               PMD_DRV_LOG(ERR, "Invalid vsi handle %u", pf_vsi_idx);
+               return;
+       }
+
+       vsi_ctx = hw->vsi_ctx[pf_vsi_idx];
+
+       if (!vsi_ctx)
+               vsi_ctx = ice_malloc(hw, sizeof(*vsi_ctx));
+
+       if (!vsi_ctx) {
+               PMD_DRV_LOG(ERR, "No memory for vsi context %u",
+                               pf_vsi_idx);
+               return;
+       }
+
+       vsi_ctx->vsi_num = pf_vsi_num;
+       hw->vsi_ctx[pf_vsi_idx] = vsi_ctx;
+
+       PMD_DRV_LOG(DEBUG, "VF%u is assigned with vsi number %u",
+                       pf_vsi_idx, vsi_ctx->vsi_num);
+}
+
 static void*
 ice_dcf_vsi_update_service_handler(void *param)
 {
@@ -242,13 +271,13 @@ ice_dcf_request_pkg_name(struct ice_hw *hw, char *pkg_name)
        rte_memcpy(&dsn, pkg_info.dsn, sizeof(dsn));
 
        snprintf(pkg_name, ICE_MAX_PKG_FILENAME_SIZE,
-                ICE_PKG_FILE_SEARCH_PATH_UPDATES "ice-%016llX.pkg",
+                ICE_PKG_FILE_SEARCH_PATH_UPDATES "ice-%016llx.pkg",
                 (unsigned long long)dsn);
        if (!access(pkg_name, 0))
                return 0;
 
        snprintf(pkg_name, ICE_MAX_PKG_FILENAME_SIZE,
-                ICE_PKG_FILE_SEARCH_PATH_DEFAULT "ice-%016llX.pkg",
+                ICE_PKG_FILE_SEARCH_PATH_DEFAULT "ice-%016llx.pkg",
                 (unsigned long long)dsn);
        if (!access(pkg_name, 0))
                return 0;
@@ -335,6 +364,14 @@ ice_dcf_init_parent_adapter(struct rte_eth_dev *eth_dev)
        parent_adapter->eth_dev = eth_dev;
        parent_adapter->pf.adapter = parent_adapter;
        parent_adapter->pf.dev_data = eth_dev->data;
+       /* create a dummy main_vsi */
+       parent_adapter->pf.main_vsi =
+               rte_zmalloc(NULL, sizeof(struct ice_vsi), 0);
+       if (!parent_adapter->pf.main_vsi)
+               return -ENOMEM;
+       parent_adapter->pf.main_vsi->adapter = parent_adapter;
+       parent_adapter->pf.adapter_stopped = 1;
+
        parent_hw->back = parent_adapter;
        parent_hw->mac_type = ICE_MAC_GENERIC;
        parent_hw->vendor_id = ICE_INTEL_VENDOR_ID;
@@ -360,14 +397,18 @@ ice_dcf_init_parent_adapter(struct rte_eth_dev *eth_dev)
        }
        parent_adapter->active_pkg_type = ice_load_pkg_type(parent_hw);
 
+       parent_adapter->pf.main_vsi->idx = hw->num_vfs;
+       ice_dcf_update_pf_vsi_map(parent_hw,
+                       parent_adapter->pf.main_vsi->idx, hw->pf_vsi_id);
+
+       ice_dcf_update_vf_vsi_map(parent_hw, hw->num_vfs, hw->vf_vsi_map);
+
        err = ice_flow_init(parent_adapter);
        if (err) {
                PMD_INIT_LOG(ERR, "Failed to initialize flow");
                goto uninit_hw;
        }
 
-       ice_dcf_update_vf_vsi_map(parent_hw, hw->num_vfs, hw->vf_vsi_map);
-
        mac = (const struct rte_ether_addr *)hw->avf.mac.addr;
        if (rte_is_valid_assigned_ether_addr(mac))
                rte_ether_addr_copy(mac, &parent_adapter->pf.dev_addr);