From patchwork Fri Jul 3 11:16:37 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gordon@dpdk.org, Noonan@dpdk.org, gordon.noonan@intel.com X-Patchwork-Id: 73029 X-Patchwork-Delegate: qi.z.zhang@intel.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id DE021A0519; Fri, 3 Jul 2020 16:39:17 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 08CEE1DC6D; Fri, 3 Jul 2020 16:37:57 +0200 (CEST) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by dpdk.org (Postfix) with ESMTP id A2A081D8CF for ; Fri, 3 Jul 2020 13:17:12 +0200 (CEST) IronPort-SDR: zYC4HizHWDoLGhyjugmFo7bIiC+UiORA+9Ug53OE81NJcdsLnAsGwI4IPn/oPpCJNKvVLHjT+7 jmHMy8X0Mf/w== X-IronPort-AV: E=McAfee;i="6000,8403,9670"; a="146220533" X-IronPort-AV: E=Sophos;i="5.75,308,1589266800"; d="scan'208";a="146220533" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Jul 2020 04:17:12 -0700 IronPort-SDR: ZVbzZayO6mxkL4iOll4HFswblMMGUj2ffp809ueh2X4ehKRkWTrlPGQx51j9PKmKJgBU/coSQo mSQHUwXUvC8g== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,308,1589266800"; d="scan'208";a="321780281" Received: from silpixa00400380.ir.intel.com ([10.237.213.188]) by FMSMGA003.fm.intel.com with ESMTP; 03 Jul 2020 04:17:11 -0700 From: Gordon@dpdk.org, Noonan@dpdk.org, gordon.noonan@intel.com To: dev@dpdk.org Cc: gordon.noonan@intel.com, Qi Zhang Date: Fri, 3 Jul 2020 12:16:37 +0100 Message-Id: <20200703111644.73351-2-gordon.noonan@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200703111644.73351-1-gordon.noonan@intel.com> References: <20200703111644.73351-1-gordon.noonan@intel.com> X-Mailman-Approved-At: Fri, 03 Jul 2020 16:37:41 +0200 Subject: [dpdk-dev] [PATCH RFC 1/8] common/iavf: add large queue VC ops X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Qi Zhang Add VC ops to support 64 queue VIRTCHNL_OP_ENABLE_LARGE_QUEUES VIRTCHNL_OP_DISABLE_LARGE_QUEUES VIRTCHNL_OP_CONFIG_LARGE_IRQ_MAP Signed-off-by: Qi Zhang --- drivers/common/iavf/virtchnl.h | 59 ++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/drivers/common/iavf/virtchnl.h b/drivers/common/iavf/virtchnl.h index 79515ee8b..5b0455fb4 100644 --- a/drivers/common/iavf/virtchnl.h +++ b/drivers/common/iavf/virtchnl.h @@ -140,6 +140,9 @@ enum virtchnl_ops { VIRTCHNL_OP_ADD_FDIR_FILTER = 47, VIRTCHNL_OP_DEL_FDIR_FILTER = 48, VIRTCHNL_OP_QUERY_FDIR_FILTER = 49, + VIRTCHNL_OP_ENABLE_LARGE_QUEUES = 50, + VIRTCHNL_OP_DISABLE_LARGE_QUEUES = 51, + VIRTCHNL_OP_CONFIG_LARGE_IRQ_MAP = 52, }; /* These macros are used to generate compilation errors if a structure/union @@ -258,6 +261,7 @@ VIRTCHNL_CHECK_STRUCT_LEN(16, virtchnl_vsi_resource); #define VIRTCHNL_VF_OFFLOAD_RX_FLEX_DESC 0X04000000 #define VIRTCHNL_VF_OFFLOAD_ADV_RSS_PF 0X08000000 #define VIRTCHNL_VF_OFFLOAD_FDIR_PF 0X10000000 +#define VIRTCHNL_VF_OFFLOAD_LARGE_VF 0X20000000 /* 0X80000000 is reserved */ /* Define below the capability flags that are not offloads */ @@ -396,6 +400,18 @@ struct virtchnl_vector_map { VIRTCHNL_CHECK_STRUCT_LEN(12, virtchnl_vector_map); +struct virtchnl_large_vector_map { + u64 rxq_map; + u64 txq_map; + u16 vsi_id; + u16 vector_id; + u16 rxitr_idx; + u16 txitr_idx; +}; + +VIRTCHNL_CHECK_STRUCT_LEN(24, virtchnl_large_vector_map); + + struct virtchnl_irq_map_info { u16 num_vectors; struct virtchnl_vector_map vecmap[1]; @@ -403,6 +419,14 @@ struct virtchnl_irq_map_info { VIRTCHNL_CHECK_STRUCT_LEN(14, virtchnl_irq_map_info); +struct virtchnl_large_irq_map_info { + u16 num_vectors; + struct virtchnl_large_vector_map vecmap[1]; +}; + +VIRTCHNL_CHECK_STRUCT_LEN(32, virtchnl_large_irq_map_info); + + /* VIRTCHNL_OP_ENABLE_QUEUES * VIRTCHNL_OP_DISABLE_QUEUES * VF sends these message to enable or disable TX/RX queue pairs. @@ -423,6 +447,16 @@ struct virtchnl_queue_select { VIRTCHNL_CHECK_STRUCT_LEN(12, virtchnl_queue_select); +struct virtchnl_large_queue_select { + u64 rx_queues; + u64 tx_queues; + u16 vsi_id; + u16 pad; +}; + +VIRTCHNL_CHECK_STRUCT_LEN(24, virtchnl_large_queue_select); + + /* VIRTCHNL_OP_ADD_ETH_ADDR * VF sends this message in order to add one or more unicast or multicast * address filters for the specified VSI. @@ -771,6 +805,10 @@ enum virtchnl_vector_limits { VIRTCHNL_OP_ENABLE_CHANNELS_MAX = ((u16)(~0) - sizeof(struct virtchnl_tc_info)) / sizeof(struct virtchnl_channel_info), + + VIRTCHNL_OP_CONFIG_LARGE_IRQ_MAP_MAX = + ((u16)(~0) - sizeof(struct virtchnl_large_irq_map_info)) / + sizeof(struct virtchnl_large_vector_map), }; /* VF reset states - these are written into the RSTAT register: @@ -1163,10 +1201,31 @@ virtchnl_vc_validate_vf_msg(struct virtchnl_version_info *ver, u32 v_opcode, sizeof(struct virtchnl_vector_map)); } break; + case VIRTCHNL_OP_CONFIG_LARGE_IRQ_MAP: + valid_len = sizeof(struct virtchnl_large_irq_map_info); + if (msglen >= valid_len) { + struct virtchnl_large_irq_map_info *vimi = + (struct virtchnl_large_irq_map_info *)msg; + + if (vimi->num_vectors == 0 || vimi->num_vectors > + VIRTCHNL_OP_CONFIG_LARGE_IRQ_MAP_MAX) { + err_msg_format = true; + break; + } + + valid_len += (vimi->num_vectors * + sizeof(struct virtchnl_large_vector_map)); + } + break; + case VIRTCHNL_OP_ENABLE_QUEUES: case VIRTCHNL_OP_DISABLE_QUEUES: valid_len = sizeof(struct virtchnl_queue_select); break; + case VIRTCHNL_OP_ENABLE_LARGE_QUEUES: + case VIRTCHNL_OP_DISABLE_LARGE_QUEUES: + valid_len = sizeof(struct virtchnl_large_queue_select); + break; case VIRTCHNL_OP_ADD_ETH_ADDR: case VIRTCHNL_OP_DEL_ETH_ADDR: valid_len = sizeof(struct virtchnl_ether_addr_list);