[v1,1/3] net/ice: get PF VSI map
Checks
Commit Message
This patch gets PF vsi number when issuing ACL rule in DCF.
Signed-off-by: Simei Su <simei.su@intel.com>
---
drivers/net/ice/ice_dcf.c | 1 +
drivers/net/ice/ice_dcf.h | 1 +
drivers/net/ice/ice_dcf_parent.c | 33 +++++++++++++++++++++++++++++++++
3 files changed, 35 insertions(+)
@@ -318,6 +318,7 @@
}
hw->num_vfs = vsi_map->num_vfs;
+ hw->pf_vsi_id = vsi_map->pf_vsi;
}
if (!memcmp(hw->vf_vsi_map, vsi_map->vf_vsi, len)) {
@@ -43,6 +43,7 @@ struct ice_dcf_hw {
uint16_t num_vfs;
uint16_t *vf_vsi_map;
+ uint16_t pf_vsi_id;
struct virtchnl_version_info virtchnl_version;
struct virtchnl_vf_resource *vf_res; /* VF resource */
@@ -78,6 +78,35 @@
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)
{
@@ -368,6 +397,10 @@ static void ice_dcf_uninit_parent_hw(struct ice_hw *hw)
}
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);
+
err = ice_flow_init(parent_adapter);
if (err) {
PMD_INIT_LOG(ERR, "Failed to initialize flow");