|
@@ -116,6 +116,9 @@ static int __ixgbe_enable_sriov(struct ixgbe_adapter *adapter)
|
|
|
* we want to disable the querying by default.
|
|
|
*/
|
|
|
adapter->vfinfo[i].rss_query_enabled = 0;
|
|
|
+
|
|
|
+ /* Untrust all VFs */
|
|
|
+ adapter->vfinfo[i].trusted = false;
|
|
|
}
|
|
|
|
|
|
return 0;
|
|
@@ -1124,6 +1127,17 @@ void ixgbe_disable_tx_rx(struct ixgbe_adapter *adapter)
|
|
|
IXGBE_WRITE_REG(hw, IXGBE_VFRE(1), 0);
|
|
|
}
|
|
|
|
|
|
+static inline void ixgbe_ping_vf(struct ixgbe_adapter *adapter, int vf)
|
|
|
+{
|
|
|
+ struct ixgbe_hw *hw = &adapter->hw;
|
|
|
+ u32 ping;
|
|
|
+
|
|
|
+ ping = IXGBE_PF_CONTROL_MSG;
|
|
|
+ if (adapter->vfinfo[vf].clear_to_send)
|
|
|
+ ping |= IXGBE_VT_MSGTYPE_CTS;
|
|
|
+ ixgbe_write_mbx(hw, &ping, 1, vf);
|
|
|
+}
|
|
|
+
|
|
|
void ixgbe_ping_all_vfs(struct ixgbe_adapter *adapter)
|
|
|
{
|
|
|
struct ixgbe_hw *hw = &adapter->hw;
|
|
@@ -1416,6 +1430,28 @@ int ixgbe_ndo_set_vf_rss_query_en(struct net_device *netdev, int vf,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+int ixgbe_ndo_set_vf_trust(struct net_device *netdev, int vf, bool setting)
|
|
|
+{
|
|
|
+ struct ixgbe_adapter *adapter = netdev_priv(netdev);
|
|
|
+
|
|
|
+ if (vf >= adapter->num_vfs)
|
|
|
+ return -EINVAL;
|
|
|
+
|
|
|
+ /* nothing to do */
|
|
|
+ if (adapter->vfinfo[vf].trusted == setting)
|
|
|
+ return 0;
|
|
|
+
|
|
|
+ adapter->vfinfo[vf].trusted = setting;
|
|
|
+
|
|
|
+ /* reset VF to reconfigure features */
|
|
|
+ adapter->vfinfo[vf].clear_to_send = false;
|
|
|
+ ixgbe_ping_vf(adapter, vf);
|
|
|
+
|
|
|
+ e_info(drv, "VF %u is %strusted\n", vf, setting ? "" : "not ");
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
int ixgbe_ndo_get_vf_config(struct net_device *netdev,
|
|
|
int vf, struct ifla_vf_info *ivi)
|
|
|
{
|
|
@@ -1430,5 +1466,6 @@ int ixgbe_ndo_get_vf_config(struct net_device *netdev,
|
|
|
ivi->qos = adapter->vfinfo[vf].pf_qos;
|
|
|
ivi->spoofchk = adapter->vfinfo[vf].spoofchk_enabled;
|
|
|
ivi->rss_query_en = adapter->vfinfo[vf].rss_query_enabled;
|
|
|
+ ivi->trusted = adapter->vfinfo[vf].trusted;
|
|
|
return 0;
|
|
|
}
|