Received: by 10.192.165.156 with SMTP id m28csp575396imm; Tue, 17 Apr 2018 15:36:44 -0700 (PDT) X-Google-Smtp-Source: AIpwx4/JZR6tYJDo0apk3Hrik7m1iPT3Xe2u1Wo0F1YIVoFv0U1Nus/bLIe12x8apzbJG02d/xCp X-Received: by 10.99.45.70 with SMTP id t67mr3155017pgt.439.1524004604027; Tue, 17 Apr 2018 15:36:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524004603; cv=none; d=google.com; s=arc-20160816; b=fXhowax+zmPdmNDQniafs8kWP4hVmQsQn5ScldB9CSJxPGlJoYzCDMfmxDCbwG+twY AKv0UlnkuFl+u909RgUILAFpTO+5Qvm9n7ZukIlu5piXW7avyU5e3GL5J8O+4/bUIzzb HDBA+MEUWp8DKudZKgisn69V6XVDB3gZ0hZLZJN091Dx266pbl4DC49G1vMGUMvTRkLZ 0alxrPRW9g2HiJP1nbxDCxwWHFqswRj8SZ/xbf5scoLFT8VevSg7iSZANe22smTsrNGe mT4T0RLPETwq2zToLRrTlL0dkHir+QI4Jo2RDHRw9ETVqJpH1cX0FGKkxiFleeFe3Xay CYIw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:reply-to:message-id:date:subject:cc:to :from:arc-authentication-results; bh=iNNNFr+XzpjBPE8OYZg8g42OR6qdRCLVZ+4y69cbN9U=; b=cOSgpmhntCk7L12dSsCL3p6fviYlMW02G9KY3NDFuNrcOJAf/GkZtglbkrTkcfdoXY 7cc46dLM1fBLQvkzaOgpyeAVL7n9gLlpGhBpy80jofM5yWwKNQ5Catod/6IXDI4kZzDv vF3cLgDCSELjFuKu+PT5PPVlNEiqtWUKP4CXmlc5khXloiIFcnik+RhXWETvhjpCPmeU fSDMC8bYVHEr5z+BvWUlqLEmQYMYcw4k61+UdO3TIctgmpeKjDxP1CIEXpXXAVFUg4Wr 5lMo0erdNGlqk/1S/hHCbCSh9q5FzqZboSFkc/DTxOpBMYToAuo3qleRlS2VAi8/he+C 3mRw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id g17si306086pfj.349.2018.04.17.15.36.20; Tue, 17 Apr 2018 15:36:43 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752227AbeDQWee (ORCPT + 99 others); Tue, 17 Apr 2018 18:34:34 -0400 Received: from a2nlsmtp01-03.prod.iad2.secureserver.net ([198.71.225.37]:59364 "EHLO a2nlsmtp01-03.prod.iad2.secureserver.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750811AbeDQWec (ORCPT ); Tue, 17 Apr 2018 18:34:32 -0400 Received: from linuxonhyperv2.linuxonhyperv.com ([107.180.71.197]) by : HOSTING RELAY : with SMTP id 8ZAIfJi4wzDeH8ZAIfivpQ; Tue, 17 Apr 2018 15:33:30 -0700 x-originating-ip: 107.180.71.197 Received: from haiyangz by linuxonhyperv2.linuxonhyperv.com with local (Exim 4.89_1) (envelope-from ) id 1f8ZAI-00063Q-02; Tue, 17 Apr 2018 15:33:30 -0700 From: Haiyang Zhang To: davem@davemloft.net, netdev@vger.kernel.org Cc: haiyangz@microsoft.com, kys@microsoft.com, sthemmin@microsoft.com, olaf@aepfle.de, vkuznets@redhat.com, devel@linuxdriverproject.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next] hv_netvsc: Add NetVSP v6 and v6.1 into version negotiation Date: Tue, 17 Apr 2018 15:31:47 -0700 Message-Id: <20180417223147.23218-1-haiyangz@linuxonhyperv.com> X-Mailer: git-send-email 2.15.1 Reply-To: haiyangz@microsoft.com X-CMAE-Envelope: MS4wfEe6UkpyTUNaFYtwVgxZWHSNRjD0ZUyRpSw6q+uaWOabXQz2lTjoavQaZ1uI7BZ3821GtEArwiCuhqAN/XACbo+3IqpqZ+hCyhsxamuXLeHepkkBKK56 Evxw7ga6jiJaolB1+CUXrvgi9U6Lc4EPSVqwyzwWs8U/UoJbGQynoVGcChkWC6scQlUYZNvc4uMSJg2C3crDUhGKbkmmkLNgRAlhcf5IX/RykMfbL2o/pcFZ kS7msoaEQR0V1MSU0gokF9NQMJq1IGLis19/eZjvSxxGGH8FJ+F6Sklko6I+QBpgjkzlnYmplll28kHiaVqKovUNPtkh7YVPLYmnYdSMAuQt1NMuHtP+1OkC izKPjUySuwVE8v6zfoQAhBvzlCjQmGgOUrX8qPkCKLIBlS7k4usZobgpSqI7YMyYNpsCdYQopdb96lmvGOWsdiG11hH8AxDjVKavnonaDidmyMXjgCoMA0GD ZpVjb0Fsmt+2yJ9cx+NDC8Ue5Awjs9aRw6jpQg== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Haiyang Zhang This patch adds the NetVSP v6 and 6.1 message structures, and includes these versions into NetVSC/NetVSP version negotiation process. Signed-off-by: Haiyang Zhang --- drivers/net/hyperv/hyperv_net.h | 164 ++++++++++++++++++++++++++++++++++++++++ drivers/net/hyperv/netvsc.c | 3 +- 2 files changed, 166 insertions(+), 1 deletion(-) diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h index 960f06141472..6ebe39a3dde6 100644 --- a/drivers/net/hyperv/hyperv_net.h +++ b/drivers/net/hyperv/hyperv_net.h @@ -237,6 +237,8 @@ void netvsc_switch_datapath(struct net_device *nv_dev, bool vf); #define NVSP_PROTOCOL_VERSION_2 0x30002 #define NVSP_PROTOCOL_VERSION_4 0x40000 #define NVSP_PROTOCOL_VERSION_5 0x50000 +#define NVSP_PROTOCOL_VERSION_6 0x60000 +#define NVSP_PROTOCOL_VERSION_61 0x60001 enum { NVSP_MSG_TYPE_NONE = 0, @@ -308,6 +310,12 @@ enum { NVSP_MSG5_TYPE_SEND_INDIRECTION_TABLE, NVSP_MSG5_MAX = NVSP_MSG5_TYPE_SEND_INDIRECTION_TABLE, + + /* Version 6 messages */ + NVSP_MSG6_TYPE_PD_API, + NVSP_MSG6_TYPE_PD_POST_BATCH, + + NVSP_MSG6_MAX = NVSP_MSG6_TYPE_PD_POST_BATCH }; enum { @@ -619,12 +627,168 @@ union nvsp_5_message_uber { struct nvsp_5_send_indirect_table send_table; } __packed; +enum nvsp_6_pd_api_op { + PD_API_OP_CONFIG = 1, + PD_API_OP_SW_DATAPATH, /* Switch Datapath */ + PD_API_OP_OPEN_PROVIDER, + PD_API_OP_CLOSE_PROVIDER, + PD_API_OP_CREATE_QUEUE, + PD_API_OP_FLUSH_QUEUE, + PD_API_OP_FREE_QUEUE, + PD_API_OP_ALLOC_COM_BUF, /* Allocate Common Buffer */ + PD_API_OP_FREE_COM_BUF, /* Free Common Buffer */ + PD_API_OP_MAX +}; + +struct grp_affinity { + u64 mask; + u16 grp; + u16 reserved[3]; +} __packed; + +struct nvsp_6_pd_api_req { + u32 op; + + union { + /* MMIO information is sent from the VM to VSP */ + struct __packed { + u64 mmio_pa; /* MMIO Physical Address */ + u32 mmio_len; + + /* Number of PD queues a VM can support */ + u16 num_subchn; + } config; + + /* Switch Datapath */ + struct __packed { + /* Host Datapath Is PacketDirect */ + u8 host_dpath_is_pd; + + /* Guest PacketDirect Is Enabled */ + u8 guest_pd_enabled; + } sw_dpath; + + /* Open Provider*/ + struct __packed { + u32 prov_id; /* Provider id */ + u32 flag; + } open_prov; + + /* Close Provider */ + struct __packed { + u32 prov_id; + } cls_prov; + + /* Create Queue*/ + struct __packed { + u32 prov_id; + u16 q_id; + u16 q_size; + u8 is_recv_q; + u8 is_rss_q; + u32 recv_data_len; + struct grp_affinity affy; + } cr_q; + + /* Delete Queue*/ + struct __packed { + u32 prov_id; + u16 q_id; + } del_q; + + /* Flush Queue */ + struct __packed { + u32 prov_id; + u16 q_id; + } flush_q; + + /* Allocate Common Buffer */ + struct __packed { + u32 len; + u32 pf_node; /* Preferred Node */ + u16 region_id; + } alloc_com_buf; + + /* Free Common Buffer */ + struct __packed { + u32 len; + u64 pa; /* Physical Address */ + u32 pf_node; /* Preferred Node */ + u16 region_id; + u8 cache_type; + } free_com_buf; + } __packed; +} __packed; + +struct nvsp_6_pd_api_comp { + u32 op; + u32 status; + + union { + struct __packed { + /* actual number of PD queues allocated to the VM */ + u16 num_pd_q; + + /* Num Receive Rss PD Queues */ + u8 num_rss_q; + + u8 is_supported; /* Is supported by VSP */ + u8 is_enabled; /* Is enabled by VSP */ + } config; + + /* Open Provider */ + struct __packed { + u32 prov_id; + } open_prov; + + /* Create Queue */ + struct __packed { + u32 prov_id; + u16 q_id; + u16 q_size; + u32 recv_data_len; + struct grp_affinity affy; + } cr_q; + + /* Allocate Common Buffer */ + struct __packed { + u64 pa; /* Physical Address */ + u32 len; + u32 pf_node; /* Preferred Node */ + u16 region_id; + u8 cache_type; + } alloc_com_buf; + } __packed; +} __packed; + +struct nvsp_6_pd_buf { + u32 region_offset; + u16 region_id; + u16 is_partial:1; + u16 reserved:15; +} __packed; + +struct nvsp_6_pd_batch_msg { + struct nvsp_message_header hdr; + u16 count; + u16 guest2host:1; + u16 is_recv:1; + u16 reserved:14; + struct nvsp_6_pd_buf pd_buf[0]; +} __packed; + +union nvsp_6_message_uber { + struct nvsp_6_pd_api_req pd_req; + struct nvsp_6_pd_api_comp pd_comp; +} __packed; + union nvsp_all_messages { union nvsp_message_init_uber init_msg; union nvsp_1_message_uber v1_msg; union nvsp_2_message_uber v2_msg; union nvsp_4_message_uber v4_msg; union nvsp_5_message_uber v5_msg; + union nvsp_6_message_uber v6_msg; } __packed; /* ALL Messages */ diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c index 04f611e6f678..e7308958b7a9 100644 --- a/drivers/net/hyperv/netvsc.c +++ b/drivers/net/hyperv/netvsc.c @@ -525,7 +525,8 @@ static int netvsc_connect_vsp(struct hv_device *device, struct net_device *ndev = hv_get_drvdata(device); static const u32 ver_list[] = { NVSP_PROTOCOL_VERSION_1, NVSP_PROTOCOL_VERSION_2, - NVSP_PROTOCOL_VERSION_4, NVSP_PROTOCOL_VERSION_5 + NVSP_PROTOCOL_VERSION_4, NVSP_PROTOCOL_VERSION_5, + NVSP_PROTOCOL_VERSION_6, NVSP_PROTOCOL_VERSION_61 }; struct nvsp_message *init_packet; int ndis_version, i, ret; -- 2.15.1