diff options
| author | Haiyang Zhang <haiyangz@microsoft.com> | 2018-04-18 01:31:47 +0300 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2018-04-19 04:20:44 +0300 | 
| commit | 0dcec221dd39d4d48fe6b22b4cacf2f49b95ffa0 (patch) | |
| tree | f2778693557856e7ac8e87503f434a33d0fb9543 /drivers/net/hyperv/hyperv_net.h | |
| parent | 0fe554a46a0ff855376053c7e4204673b7879f05 (diff) | |
| download | linux-0dcec221dd39d4d48fe6b22b4cacf2f49b95ffa0.tar.xz | |
hv_netvsc: Add NetVSP v6 and v6.1 into version negotiation
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 <haiyangz@microsoft.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/hyperv/hyperv_net.h')
| -rw-r--r-- | drivers/net/hyperv/hyperv_net.h | 164 | 
1 files changed, 164 insertions, 0 deletions
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 */  | 
