From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id 1815D5591 for ; Fri, 25 Mar 2016 09:42:11 +0100 (CET) Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga101.fm.intel.com with ESMTP; 25 Mar 2016 01:42:11 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.24,390,1455004800"; d="scan'208";a="931477552" Received: from shvmail01.sh.intel.com ([10.239.29.42]) by fmsmga001.fm.intel.com with ESMTP; 25 Mar 2016 01:42:11 -0700 Received: from shecgisg004.sh.intel.com (shecgisg004.sh.intel.com [10.239.29.89]) by shvmail01.sh.intel.com with ESMTP id u2P8g9N2012776; Fri, 25 Mar 2016 16:42:09 +0800 Received: from shecgisg004.sh.intel.com (localhost [127.0.0.1]) by shecgisg004.sh.intel.com (8.13.6/8.13.6/SuSE Linux 0.8) with ESMTP id u2P8g5lF021937; Fri, 25 Mar 2016 16:42:07 +0800 Received: (from zhetao@localhost) by shecgisg004.sh.intel.com (8.13.6/8.13.6/Submit) id u2P8g5QU021933; Fri, 25 Mar 2016 16:42:05 +0800 From: Zhe Tao To: dev@dpdk.org Cc: zhe.tao@intel.com, jingjing.wu@intel.com Date: Fri, 25 Mar 2016 16:41:58 +0800 Message-Id: <1458895321-21896-2-git-send-email-zhe.tao@intel.com> X-Mailer: git-send-email 1.7.4.1 In-Reply-To: <1458895321-21896-1-git-send-email-zhe.tao@intel.com> References: <1458816499-705-1-git-send-email-zhe.tao@intel.com> <1458895321-21896-1-git-send-email-zhe.tao@intel.com> Subject: [dpdk-dev] [PATCH 1/3 v7] i40e: support floating VEB config X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 25 Mar 2016 08:42:12 -0000 Add the new floating related argument option in the devarg. Using this parameter, all the samples can decide whether to use legacy VEB/VEPA or floating VEB. To enable this feature, the user should pass a devargs parameter to the EAL like "-w 84:00.0,enable_floating=1", and the application will make sure the PMD will use the floating VEB feature for all the VFs created by this PF device. Signed-off-by: Zhe Tao --- drivers/net/i40e/i40e_ethdev.c | 44 ++++++++++++++++++++++++++++++++++++++++++ drivers/net/i40e/i40e_ethdev.h | 6 ++++++ 2 files changed, 50 insertions(+) diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c index 6fdae57..01f1d3d 100644 --- a/drivers/net/i40e/i40e_ethdev.c +++ b/drivers/net/i40e/i40e_ethdev.c @@ -739,6 +739,44 @@ i40e_add_tx_flow_control_drop_filter(struct i40e_pf *pf) " frames from VSIs."); } +static int i40e_check_floating_handler(__rte_unused const char *key, + const char *value, + __rte_unused void *opaque) +{ + if (strcmp(value, "1")) + return -1; + + return 0; +} + +static int +i40e_check_floating(struct rte_devargs *devargs) +{ + struct rte_kvargs *kvlist; + const char *floating_key = "enable_floating"; + + if (devargs == NULL) + return 0; + + kvlist = rte_kvargs_parse(devargs->args, NULL); + if (kvlist == NULL) + return 0; + + if (!rte_kvargs_count(kvlist, floating_key)) { + rte_kvargs_free(kvlist); + return 0; + } + /* Floating is enabled when there's key-value pair: enable_floating=1 */ + if (rte_kvargs_process(kvlist, floating_key, + i40e_check_floating_handler, NULL) < 0) { + rte_kvargs_free(kvlist); + return 0; + } + rte_kvargs_free(kvlist); + + return 1; +} + static int eth_i40e_dev_init(struct rte_eth_dev *dev) { @@ -829,6 +867,12 @@ eth_i40e_dev_init(struct rte_eth_dev *dev) ((hw->nvm.version >> 4) & 0xff), (hw->nvm.version & 0xf), hw->nvm.eetrack); + /* Need the special FW version support floating VEB */ + if (hw->aq.fw_maj_ver >= FLOATING_FW_MAJ) { + pf->floating = i40e_check_floating(pci_dev->devargs); + } else { + pf->floating = false; + } /* Clear PXE mode */ i40e_clear_pxe_mode(hw); diff --git a/drivers/net/i40e/i40e_ethdev.h b/drivers/net/i40e/i40e_ethdev.h index 1c75672..7dc6936 100644 --- a/drivers/net/i40e/i40e_ethdev.h +++ b/drivers/net/i40e/i40e_ethdev.h @@ -36,6 +36,7 @@ #include #include +#include #define I40E_VLAN_TAG_SIZE 4 @@ -171,6 +172,10 @@ enum i40e_flxpld_layer_idx { #define I40E_QUEUE_ITR_INTERVAL_DEFAULT 32 /* 32 us */ #define I40E_QUEUE_ITR_INTERVAL_MAX 8160 /* 8160 us */ +/* Special FW support this floating VEB feature */ +#define FLOATING_FW_MAJ 5 +#define FLOATING_FW_MIN 0 + struct i40e_adapter; /** @@ -446,6 +451,7 @@ struct i40e_pf { struct i40e_fc_conf fc_conf; /* Flow control conf */ struct i40e_mirror_rule_list mirror_list; uint16_t nb_mirror_rule; /* The number of mirror rules */ + uint16_t floating; /* The flag to use the floating VEB */ }; enum pending_msg { -- 2.1.4