|
@@ -512,6 +512,7 @@ static s32 ixgbe_set_vf_lpe(struct ixgbe_adapter *adapter, u32 *msgbuf, u32 vf)
|
|
switch (adapter->vfinfo[vf].vf_api) {
|
|
switch (adapter->vfinfo[vf].vf_api) {
|
|
case ixgbe_mbox_api_11:
|
|
case ixgbe_mbox_api_11:
|
|
case ixgbe_mbox_api_12:
|
|
case ixgbe_mbox_api_12:
|
|
|
|
+ case ixgbe_mbox_api_13:
|
|
/*
|
|
/*
|
|
* Version 1.1 supports jumbo frames on VFs if PF has
|
|
* Version 1.1 supports jumbo frames on VFs if PF has
|
|
* jumbo frames enabled which means legacy VFs are
|
|
* jumbo frames enabled which means legacy VFs are
|
|
@@ -979,6 +980,7 @@ static int ixgbe_negotiate_vf_api(struct ixgbe_adapter *adapter,
|
|
case ixgbe_mbox_api_10:
|
|
case ixgbe_mbox_api_10:
|
|
case ixgbe_mbox_api_11:
|
|
case ixgbe_mbox_api_11:
|
|
case ixgbe_mbox_api_12:
|
|
case ixgbe_mbox_api_12:
|
|
|
|
+ case ixgbe_mbox_api_13:
|
|
adapter->vfinfo[vf].vf_api = api;
|
|
adapter->vfinfo[vf].vf_api = api;
|
|
return 0;
|
|
return 0;
|
|
default:
|
|
default:
|
|
@@ -1003,6 +1005,7 @@ static int ixgbe_get_vf_queues(struct ixgbe_adapter *adapter,
|
|
case ixgbe_mbox_api_20:
|
|
case ixgbe_mbox_api_20:
|
|
case ixgbe_mbox_api_11:
|
|
case ixgbe_mbox_api_11:
|
|
case ixgbe_mbox_api_12:
|
|
case ixgbe_mbox_api_12:
|
|
|
|
+ case ixgbe_mbox_api_13:
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
return -1;
|
|
return -1;
|
|
@@ -1042,8 +1045,13 @@ static int ixgbe_get_vf_reta(struct ixgbe_adapter *adapter, u32 *msgbuf, u32 vf)
|
|
return -EPERM;
|
|
return -EPERM;
|
|
|
|
|
|
/* verify the PF is supporting the correct API */
|
|
/* verify the PF is supporting the correct API */
|
|
- if (adapter->vfinfo[vf].vf_api != ixgbe_mbox_api_12)
|
|
|
|
|
|
+ switch (adapter->vfinfo[vf].vf_api) {
|
|
|
|
+ case ixgbe_mbox_api_13:
|
|
|
|
+ case ixgbe_mbox_api_12:
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
return -EOPNOTSUPP;
|
|
return -EOPNOTSUPP;
|
|
|
|
+ }
|
|
|
|
|
|
/* This mailbox command is supported (required) only for 82599 and x540
|
|
/* This mailbox command is supported (required) only for 82599 and x540
|
|
* VFs which support up to 4 RSS queues. Therefore we will compress the
|
|
* VFs which support up to 4 RSS queues. Therefore we will compress the
|
|
@@ -1069,8 +1077,13 @@ static int ixgbe_get_vf_rss_key(struct ixgbe_adapter *adapter,
|
|
return -EPERM;
|
|
return -EPERM;
|
|
|
|
|
|
/* verify the PF is supporting the correct API */
|
|
/* verify the PF is supporting the correct API */
|
|
- if (adapter->vfinfo[vf].vf_api != ixgbe_mbox_api_12)
|
|
|
|
|
|
+ switch (adapter->vfinfo[vf].vf_api) {
|
|
|
|
+ case ixgbe_mbox_api_13:
|
|
|
|
+ case ixgbe_mbox_api_12:
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
return -EOPNOTSUPP;
|
|
return -EOPNOTSUPP;
|
|
|
|
+ }
|
|
|
|
|
|
memcpy(rss_key, adapter->rss_key, sizeof(adapter->rss_key));
|
|
memcpy(rss_key, adapter->rss_key, sizeof(adapter->rss_key));
|
|
|
|
|
|
@@ -1082,11 +1095,16 @@ static int ixgbe_update_vf_xcast_mode(struct ixgbe_adapter *adapter,
|
|
{
|
|
{
|
|
struct ixgbe_hw *hw = &adapter->hw;
|
|
struct ixgbe_hw *hw = &adapter->hw;
|
|
int xcast_mode = msgbuf[1];
|
|
int xcast_mode = msgbuf[1];
|
|
- u32 vmolr, disable, enable;
|
|
|
|
|
|
+ u32 vmolr, fctrl, disable, enable;
|
|
|
|
|
|
/* verify the PF is supporting the correct APIs */
|
|
/* verify the PF is supporting the correct APIs */
|
|
switch (adapter->vfinfo[vf].vf_api) {
|
|
switch (adapter->vfinfo[vf].vf_api) {
|
|
case ixgbe_mbox_api_12:
|
|
case ixgbe_mbox_api_12:
|
|
|
|
+ /* promisc introduced in 1.3 version */
|
|
|
|
+ if (xcast_mode == IXGBEVF_XCAST_MODE_PROMISC)
|
|
|
|
+ return -EOPNOTSUPP;
|
|
|
|
+ /* Fall threw */
|
|
|
|
+ case ixgbe_mbox_api_13:
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
return -EOPNOTSUPP;
|
|
return -EOPNOTSUPP;
|
|
@@ -1102,17 +1120,34 @@ static int ixgbe_update_vf_xcast_mode(struct ixgbe_adapter *adapter,
|
|
|
|
|
|
switch (xcast_mode) {
|
|
switch (xcast_mode) {
|
|
case IXGBEVF_XCAST_MODE_NONE:
|
|
case IXGBEVF_XCAST_MODE_NONE:
|
|
- disable = IXGBE_VMOLR_BAM | IXGBE_VMOLR_ROMPE | IXGBE_VMOLR_MPE;
|
|
|
|
|
|
+ disable = IXGBE_VMOLR_BAM | IXGBE_VMOLR_ROMPE |
|
|
|
|
+ IXGBE_VMOLR_MPE | IXGBE_VMOLR_UPE | IXGBE_VMOLR_VPE;
|
|
enable = 0;
|
|
enable = 0;
|
|
break;
|
|
break;
|
|
case IXGBEVF_XCAST_MODE_MULTI:
|
|
case IXGBEVF_XCAST_MODE_MULTI:
|
|
- disable = IXGBE_VMOLR_MPE;
|
|
|
|
|
|
+ disable = IXGBE_VMOLR_MPE | IXGBE_VMOLR_UPE | IXGBE_VMOLR_VPE;
|
|
enable = IXGBE_VMOLR_BAM | IXGBE_VMOLR_ROMPE;
|
|
enable = IXGBE_VMOLR_BAM | IXGBE_VMOLR_ROMPE;
|
|
break;
|
|
break;
|
|
case IXGBEVF_XCAST_MODE_ALLMULTI:
|
|
case IXGBEVF_XCAST_MODE_ALLMULTI:
|
|
- disable = 0;
|
|
|
|
|
|
+ disable = IXGBE_VMOLR_UPE | IXGBE_VMOLR_VPE;
|
|
enable = IXGBE_VMOLR_BAM | IXGBE_VMOLR_ROMPE | IXGBE_VMOLR_MPE;
|
|
enable = IXGBE_VMOLR_BAM | IXGBE_VMOLR_ROMPE | IXGBE_VMOLR_MPE;
|
|
break;
|
|
break;
|
|
|
|
+ case IXGBEVF_XCAST_MODE_PROMISC:
|
|
|
|
+ if (hw->mac.type <= ixgbe_mac_82599EB)
|
|
|
|
+ return -EOPNOTSUPP;
|
|
|
|
+
|
|
|
|
+ fctrl = IXGBE_READ_REG(hw, IXGBE_FCTRL);
|
|
|
|
+ if (!(fctrl & IXGBE_FCTRL_UPE)) {
|
|
|
|
+ /* VF promisc requires PF in promisc */
|
|
|
|
+ e_warn(drv,
|
|
|
|
+ "Enabling VF promisc requires PF in promisc\n");
|
|
|
|
+ return -EPERM;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ disable = 0;
|
|
|
|
+ enable = IXGBE_VMOLR_BAM | IXGBE_VMOLR_ROMPE |
|
|
|
|
+ IXGBE_VMOLR_MPE | IXGBE_VMOLR_UPE | IXGBE_VMOLR_VPE;
|
|
|
|
+ break;
|
|
default:
|
|
default:
|
|
return -EOPNOTSUPP;
|
|
return -EOPNOTSUPP;
|
|
}
|
|
}
|