ixgbe: Add GET_RSS_KEY command to VF-PF channel commands set
authorVlad Zolotarov <vladz@cloudius-systems.com>
Mon, 30 Mar 2015 18:35:27 +0000 (21:35 +0300)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Sat, 11 Apr 2015 18:30:12 +0000 (11:30 -0700)
For 82599 and x540 VFs and PF share the same RSS Key. Therefore we will
return the same RSS key for all VFs.

Support for other devices will be added later.

Signed-off-by: Vlad Zolotarov <vladz@cloudius-systems.com>
Tested-by: Phil Schmitt <phillip.j.schmitt@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h
drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c

index 3522f536a5df8490593933c279dba112b8d475d1..b1e4703ff2a5949fc4c35db6c0c1cd1dceea6675 100644 (file)
@@ -100,6 +100,7 @@ enum ixgbe_pfvf_api_rev {
 
 /* mailbox API, version 1.2 VF requests */
 #define IXGBE_VF_GET_RETA      0x0a    /* VF request for RETA */
+#define IXGBE_VF_GET_RSS_KEY   0x0b    /* get RSS key */
 
 /* length of permanent address message returned from PF */
 #define IXGBE_VF_PERMADDR_MSG_LEN 4
index 58566a139a50133b3a793b89d181a9b964f56b02..1d17b5872dd1f266625891b600d673c98a8cfa0f 100644 (file)
@@ -983,6 +983,24 @@ static int ixgbe_get_vf_reta(struct ixgbe_adapter *adapter, u32 *msgbuf, u32 vf)
        return 0;
 }
 
+static int ixgbe_get_vf_rss_key(struct ixgbe_adapter *adapter,
+                               u32 *msgbuf, u32 vf)
+{
+       u32 *rss_key = &msgbuf[1];
+
+       /* Check if the operation is permitted */
+       if (!adapter->vfinfo[vf].rss_query_enabled)
+               return -EPERM;
+
+       /* verify the PF is supporting the correct API */
+       if (adapter->vfinfo[vf].vf_api != ixgbe_mbox_api_12)
+               return -EOPNOTSUPP;
+
+       memcpy(rss_key, adapter->rss_key, sizeof(adapter->rss_key));
+
+       return 0;
+}
+
 static int ixgbe_rcv_msg_from_vf(struct ixgbe_adapter *adapter, u32 vf)
 {
        u32 mbx_size = IXGBE_VFMAILBOX_SIZE;
@@ -1042,6 +1060,9 @@ static int ixgbe_rcv_msg_from_vf(struct ixgbe_adapter *adapter, u32 vf)
        case IXGBE_VF_GET_RETA:
                retval = ixgbe_get_vf_reta(adapter, msgbuf, vf);
                break;
+       case IXGBE_VF_GET_RSS_KEY:
+               retval = ixgbe_get_vf_rss_key(adapter, msgbuf, vf);
+               break;
        default:
                e_err(drv, "Unhandled Msg %8.8x\n", msgbuf[0]);
                retval = IXGBE_ERR_MBX;