|
@@ -1121,12 +1121,13 @@ static int i40e_vc_send_resp_to_vf(struct i40e_vf *vf,
|
|
|
*
|
|
|
* called from the VF to request the API version used by the PF
|
|
|
**/
|
|
|
-static int i40e_vc_get_version_msg(struct i40e_vf *vf)
|
|
|
+static int i40e_vc_get_version_msg(struct i40e_vf *vf, u8 *msg)
|
|
|
{
|
|
|
struct i40e_virtchnl_version_info info = {
|
|
|
I40E_VIRTCHNL_VERSION_MAJOR, I40E_VIRTCHNL_VERSION_MINOR
|
|
|
};
|
|
|
|
|
|
+ vf->vf_ver = *(struct i40e_virtchnl_version_info *)msg;
|
|
|
return i40e_vc_send_msg_to_vf(vf, I40E_VIRTCHNL_OP_VERSION,
|
|
|
I40E_SUCCESS, (u8 *)&info,
|
|
|
sizeof(struct
|
|
@@ -1141,7 +1142,7 @@ static int i40e_vc_get_version_msg(struct i40e_vf *vf)
|
|
|
*
|
|
|
* called from the VF to request its resources
|
|
|
**/
|
|
|
-static int i40e_vc_get_vf_resources_msg(struct i40e_vf *vf)
|
|
|
+static int i40e_vc_get_vf_resources_msg(struct i40e_vf *vf, u8 *msg)
|
|
|
{
|
|
|
struct i40e_virtchnl_vf_resource *vfres = NULL;
|
|
|
struct i40e_pf *pf = vf->pf;
|
|
@@ -1165,11 +1166,18 @@ static int i40e_vc_get_vf_resources_msg(struct i40e_vf *vf)
|
|
|
len = 0;
|
|
|
goto err;
|
|
|
}
|
|
|
+ if (VF_IS_V11(vf))
|
|
|
+ vf->driver_caps = *(u32 *)msg;
|
|
|
+ else
|
|
|
+ vf->driver_caps = I40E_VIRTCHNL_VF_OFFLOAD_L2 |
|
|
|
+ I40E_VIRTCHNL_VF_OFFLOAD_RSS_REG |
|
|
|
+ I40E_VIRTCHNL_VF_OFFLOAD_VLAN;
|
|
|
|
|
|
vfres->vf_offload_flags = I40E_VIRTCHNL_VF_OFFLOAD_L2;
|
|
|
vsi = pf->vsi[vf->lan_vsi_idx];
|
|
|
if (!vsi->info.pvid)
|
|
|
- vfres->vf_offload_flags |= I40E_VIRTCHNL_VF_OFFLOAD_VLAN;
|
|
|
+ vfres->vf_offload_flags |= I40E_VIRTCHNL_VF_OFFLOAD_VLAN |
|
|
|
+ I40E_VIRTCHNL_VF_OFFLOAD_RSS_REG;
|
|
|
|
|
|
vfres->num_vsis = num_vsis;
|
|
|
vfres->num_queue_pairs = vf->num_queue_pairs;
|
|
@@ -1771,9 +1779,14 @@ static int i40e_vc_validate_vf_msg(struct i40e_vf *vf, u32 v_opcode,
|
|
|
valid_len = sizeof(struct i40e_virtchnl_version_info);
|
|
|
break;
|
|
|
case I40E_VIRTCHNL_OP_RESET_VF:
|
|
|
- case I40E_VIRTCHNL_OP_GET_VF_RESOURCES:
|
|
|
valid_len = 0;
|
|
|
break;
|
|
|
+ case I40E_VIRTCHNL_OP_GET_VF_RESOURCES:
|
|
|
+ if (VF_IS_V11(vf))
|
|
|
+ valid_len = sizeof(u32);
|
|
|
+ else
|
|
|
+ valid_len = 0;
|
|
|
+ break;
|
|
|
case I40E_VIRTCHNL_OP_CONFIG_TX_QUEUE:
|
|
|
valid_len = sizeof(struct i40e_virtchnl_txq_info);
|
|
|
break;
|
|
@@ -1886,10 +1899,10 @@ int i40e_vc_process_vf_msg(struct i40e_pf *pf, u16 vf_id, u32 v_opcode,
|
|
|
|
|
|
switch (v_opcode) {
|
|
|
case I40E_VIRTCHNL_OP_VERSION:
|
|
|
- ret = i40e_vc_get_version_msg(vf);
|
|
|
+ ret = i40e_vc_get_version_msg(vf, msg);
|
|
|
break;
|
|
|
case I40E_VIRTCHNL_OP_GET_VF_RESOURCES:
|
|
|
- ret = i40e_vc_get_vf_resources_msg(vf);
|
|
|
+ ret = i40e_vc_get_vf_resources_msg(vf, msg);
|
|
|
break;
|
|
|
case I40E_VIRTCHNL_OP_RESET_VF:
|
|
|
i40e_vc_reset_vf_msg(vf);
|