From patchwork Sun Sep 14 14:48:27 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Zhang, Helin" X-Patchwork-Id: 377 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id 2345FB39C; Sun, 14 Sep 2014 16:43:19 +0200 (CEST) Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by dpdk.org (Postfix) with ESMTP id C3A99AE99 for ; Sun, 14 Sep 2014 16:43:17 +0200 (CEST) Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga101.jf.intel.com with ESMTP; 14 Sep 2014 07:48:44 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.04,521,1406617200"; d="scan'208";a="602689861" Received: from shvmail01.sh.intel.com ([10.239.29.42]) by orsmga002.jf.intel.com with ESMTP; 14 Sep 2014 07:48:43 -0700 Received: from shecgisg004.sh.intel.com (shecgisg004.sh.intel.com [10.239.29.89]) by shvmail01.sh.intel.com with ESMTP id s8EEmefR018787; Sun, 14 Sep 2014 22:48:40 +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 s8EEmch1030504; Sun, 14 Sep 2014 22:48:40 +0800 Received: (from hzhan75@localhost) by shecgisg004.sh.intel.com (8.13.6/8.13.6/Submit) id s8EEmc3K030500; Sun, 14 Sep 2014 22:48:38 +0800 From: Helin Zhang To: dev@dpdk.org Date: Sun, 14 Sep 2014 22:48:27 +0800 Message-Id: <1410706109-30448-4-git-send-email-helin.zhang@intel.com> X-Mailer: git-send-email 1.7.4.1 In-Reply-To: <1410706109-30448-1-git-send-email-helin.zhang@intel.com> References: <1410706109-30448-1-git-send-email-helin.zhang@intel.com> Subject: [dpdk-dev] [PATCH v2 3/5] i40e: support of processing crc stripping config in PF host 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" To support processing the extra configuration of crc stripping in DPDK PF host, new 'struct i40e_virtchnl_queue_pair_extra_info' and a new virtual channel operation of 'I40E_VIRTCHNL_OP_CONFIG_VSI_QUEUES_EX' are added, and also functions are reworked to support configuring VSI queues with or without crc stripping configuration. v2 changes: * Put processing crc stripping configuration in PF host into a single patch. Signed-off-by: Helin Zhang Reviewed-by: Jingjing Wu Reviewed-by: Jing Chen --- lib/librte_pmd_i40e/i40e_pf.c | 38 ++++++++++++++++++++++++++++++-------- lib/librte_pmd_i40e/i40e_pf.h | 7 +++++++ 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/lib/librte_pmd_i40e/i40e_pf.c b/lib/librte_pmd_i40e/i40e_pf.c index 1583021..bc9bfcb 100644 --- a/lib/librte_pmd_i40e/i40e_pf.c +++ b/lib/librte_pmd_i40e/i40e_pf.c @@ -327,7 +327,8 @@ send_msg: static int i40e_pf_host_hmc_config_rxq(struct i40e_hw *hw, struct i40e_pf_vf *vf, - struct i40e_virtchnl_rxq_info *rxq) + struct i40e_virtchnl_rxq_info *rxq, + struct i40e_virtchnl_queue_pair_extra_info *qpei) { int err = I40E_SUCCESS; struct i40e_hmc_obj_rxq rx_ctx; @@ -411,13 +412,15 @@ i40e_pf_host_hmc_config_txq(struct i40e_hw *hw, static int i40e_pf_host_process_cmd_config_vsi_queues(struct i40e_pf_vf *vf, uint8_t *msg, - uint16_t msglen) + uint16_t msglen, + int opcode) { struct i40e_hw *hw = I40E_PF_TO_HW(vf->pf); struct i40e_vsi *vsi = vf->vsi; struct i40e_virtchnl_vsi_queue_config_info *vc_vqci = (struct i40e_virtchnl_vsi_queue_config_info *)msg; struct i40e_virtchnl_queue_pair_info *vc_qpi; + struct i40e_virtchnl_queue_pair_extra_info *vc_qpei = NULL; int i, ret = I40E_SUCCESS; if (msg == NULL || msglen <= sizeof(*vc_vqci) || @@ -428,6 +431,12 @@ i40e_pf_host_process_cmd_config_vsi_queues(struct i40e_pf_vf *vf, } vc_qpi = vc_vqci->qpair; + if (opcode == I40E_VIRTCHNL_OP_CONFIG_VSI_QUEUES_EX) + vc_qpei = (struct i40e_virtchnl_queue_pair_extra_info *) + (((uint8_t *)vc_qpi) + + (sizeof(struct i40e_virtchnl_queue_pair_info) * + vc_vqci->num_queue_pairs)); + for (i = 0; i < vc_vqci->num_queue_pairs; i++) { if (vc_qpi[i].rxq.queue_id > vsi->nb_qps - 1 || vc_qpi[i].txq.queue_id > vsi->nb_qps - 1) { @@ -435,9 +444,16 @@ i40e_pf_host_process_cmd_config_vsi_queues(struct i40e_pf_vf *vf, goto send_msg; } - /* Apply VF RX queue setting to HMC */ - if (i40e_pf_host_hmc_config_rxq(hw, vf, &vc_qpi[i].rxq) - != I40E_SUCCESS) { + /* + * Apply VF RX queue setting to HMC. + * If the opcode is I40E_VIRTCHNL_OP_CONFIG_VSI_QUEUES_EX, + * then the extra information of + * 'struct i40e_virtchnl_queue_pair_extra_info' is needed, + * otherwise set the last parameter to NULL. + */ + if (i40e_pf_host_hmc_config_rxq(hw, vf, &vc_qpi[i].rxq, + (vc_qpei != NULL ? (&vc_qpei[i]) : NULL)) != + I40E_SUCCESS) { PMD_DRV_LOG(ERR, "Configure RX queue HMC failed"); ret = I40E_ERR_PARAM; goto send_msg; @@ -453,8 +469,8 @@ i40e_pf_host_process_cmd_config_vsi_queues(struct i40e_pf_vf *vf, } send_msg: - i40e_pf_host_send_msg_to_vf(vf, I40E_VIRTCHNL_OP_CONFIG_VSI_QUEUES, - ret, NULL, 0); + i40e_pf_host_send_msg_to_vf(vf, opcode, ret, NULL, 0); + return ret; } @@ -870,7 +886,13 @@ i40e_pf_host_handle_vf_msg(struct rte_eth_dev *dev, break; case I40E_VIRTCHNL_OP_CONFIG_VSI_QUEUES: PMD_DRV_LOG(INFO, "OP_CONFIG_VSI_QUEUES received\n"); - i40e_pf_host_process_cmd_config_vsi_queues(vf, msg, msglen); + i40e_pf_host_process_cmd_config_vsi_queues(vf, msg, + msglen, opcode); + break; + case I40E_VIRTCHNL_OP_CONFIG_VSI_QUEUES_EX: + PMD_DRV_LOG(INFO, "OP_CONFIG_VSI_QUEUES_EX received\n"); + i40e_pf_host_process_cmd_config_vsi_queues(vf, msg, + msglen, opcode); break; case I40E_VIRTCHNL_OP_CONFIG_IRQ_MAP: PMD_DRV_LOG(INFO, "OP_CONFIG_IRQ_MAP received\n"); diff --git a/lib/librte_pmd_i40e/i40e_pf.h b/lib/librte_pmd_i40e/i40e_pf.h index 41b6826..19e1379 100644 --- a/lib/librte_pmd_i40e/i40e_pf.h +++ b/lib/librte_pmd_i40e/i40e_pf.h @@ -57,7 +57,14 @@ enum i40e_virtchnl_ops_DPDK { I40E_VIRTCHNL_OP_GET_LINK_STAT = I40E_VIRTCHNL_OP_EVENT + 0x100, I40E_VIRTCHNL_OP_CFG_VLAN_OFFLOAD, I40E_VIRTCHNL_OP_CFG_VLAN_PVID, + I40E_VIRTCHNL_OP_CONFIG_VSI_QUEUES_EX, }; + +/* DPDK extra configurations for queues */ +struct i40e_virtchnl_queue_pair_extra_info { + uint8_t crcstrip; +}; + struct i40e_virtchnl_vlan_offload_info { uint16_t vsi_id; uint8_t enable_vlan_strip;