]> www.infradead.org Git - users/hch/misc.git/commitdiff
ixgbe: handle IXGBE_VF_FEATURES_NEGOTIATE mbox cmd
authorJedrzej Jagielski <jedrzej.jagielski@intel.com>
Fri, 10 Oct 2025 00:03:50 +0000 (17:03 -0700)
committerJakub Kicinski <kuba@kernel.org>
Tue, 14 Oct 2025 00:44:49 +0000 (17:44 -0700)
Send to VF information about features supported by the PF driver.

Increase API version to 1.7.

Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
Signed-off-by: Jedrzej Jagielski <jedrzej.jagielski@intel.com>
Tested-by: Rafal Romanowski <rafal.romanowski@intel.com>
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Link: https://patch.msgid.link/20251009-jk-iwl-net-2025-10-01-v3-5-ef32a425b92a@intel.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h
drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c

index f7256a339c99b7abcd18ac1cee29c55c3e9707b8..0334ed4b8fa399ab179bbf49595590ccc69d3fd6 100644 (file)
@@ -52,6 +52,7 @@ enum ixgbe_pfvf_api_rev {
        ixgbe_mbox_api_14,      /* API version 1.4, linux/freebsd VF driver */
        ixgbe_mbox_api_15,      /* API version 1.5, linux/freebsd VF driver */
        ixgbe_mbox_api_16,      /* API version 1.6, linux/freebsd VF driver */
+       ixgbe_mbox_api_17,      /* API version 1.7, linux/freebsd VF driver */
        /* This value should always be last */
        ixgbe_mbox_api_unknown, /* indicates that API version is not known */
 };
@@ -91,6 +92,9 @@ enum ixgbe_pfvf_api_rev {
 /* mailbox API, version 1.6 VF requests */
 #define IXGBE_VF_GET_PF_LINK_STATE     0x11 /* request PF to send link info */
 
+/* mailbox API, version 1.7 VF requests */
+#define IXGBE_VF_FEATURES_NEGOTIATE    0x12 /* get features supported by PF */
+
 /* length of permanent address message returned from PF */
 #define IXGBE_VF_PERMADDR_MSG_LEN 4
 /* word in permanent address message with the current multicast type */
@@ -101,6 +105,12 @@ enum ixgbe_pfvf_api_rev {
 #define IXGBE_VF_MBX_INIT_TIMEOUT 2000 /* number of retries on mailbox */
 #define IXGBE_VF_MBX_INIT_DELAY   500  /* microseconds between retries */
 
+/* features negotiated between PF/VF */
+#define IXGBEVF_PF_SUP_IPSEC           BIT(0)
+#define IXGBEVF_PF_SUP_ESX_MBX         BIT(1)
+
+#define IXGBE_SUPPORTED_FEATURES       IXGBEVF_PF_SUP_IPSEC
+
 struct ixgbe_hw;
 
 int ixgbe_read_mbx(struct ixgbe_hw *, u32 *, u16, u16);
index b09271d61a4efcdf1e8d6eb54c205ebb93f24241..ee133d6749b377af8cfec4938463749fc706845f 100644 (file)
@@ -511,6 +511,7 @@ static int ixgbe_set_vf_lpe(struct ixgbe_adapter *adapter, u32 max_frame, u32 vf
                case ixgbe_mbox_api_13:
                case ixgbe_mbox_api_14:
                case ixgbe_mbox_api_16:
+               case ixgbe_mbox_api_17:
                        /* Version 1.1 supports jumbo frames on VFs if PF has
                         * jumbo frames enabled which means legacy VFs are
                         * disabled
@@ -1048,6 +1049,7 @@ static int ixgbe_negotiate_vf_api(struct ixgbe_adapter *adapter,
        case ixgbe_mbox_api_13:
        case ixgbe_mbox_api_14:
        case ixgbe_mbox_api_16:
+       case ixgbe_mbox_api_17:
                adapter->vfinfo[vf].vf_api = api;
                return 0;
        default:
@@ -1075,6 +1077,7 @@ static int ixgbe_get_vf_queues(struct ixgbe_adapter *adapter,
        case ixgbe_mbox_api_13:
        case ixgbe_mbox_api_14:
        case ixgbe_mbox_api_16:
+       case ixgbe_mbox_api_17:
                break;
        default:
                return -1;
@@ -1115,6 +1118,7 @@ static int ixgbe_get_vf_reta(struct ixgbe_adapter *adapter, u32 *msgbuf, u32 vf)
 
        /* verify the PF is supporting the correct API */
        switch (adapter->vfinfo[vf].vf_api) {
+       case ixgbe_mbox_api_17:
        case ixgbe_mbox_api_16:
        case ixgbe_mbox_api_14:
        case ixgbe_mbox_api_13:
@@ -1149,6 +1153,7 @@ static int ixgbe_get_vf_rss_key(struct ixgbe_adapter *adapter,
 
        /* verify the PF is supporting the correct API */
        switch (adapter->vfinfo[vf].vf_api) {
+       case ixgbe_mbox_api_17:
        case ixgbe_mbox_api_16:
        case ixgbe_mbox_api_14:
        case ixgbe_mbox_api_13:
@@ -1180,6 +1185,7 @@ static int ixgbe_update_vf_xcast_mode(struct ixgbe_adapter *adapter,
        case ixgbe_mbox_api_13:
        case ixgbe_mbox_api_14:
        case ixgbe_mbox_api_16:
+       case ixgbe_mbox_api_17:
                break;
        default:
                return -EOPNOTSUPP;
@@ -1251,6 +1257,7 @@ static int ixgbe_get_vf_link_state(struct ixgbe_adapter *adapter,
        case ixgbe_mbox_api_13:
        case ixgbe_mbox_api_14:
        case ixgbe_mbox_api_16:
+       case ixgbe_mbox_api_17:
                break;
        default:
                return -EOPNOTSUPP;
@@ -1278,6 +1285,7 @@ static int ixgbe_send_vf_link_status(struct ixgbe_adapter *adapter,
 
        switch (adapter->vfinfo[vf].vf_api) {
        case ixgbe_mbox_api_16:
+       case ixgbe_mbox_api_17:
                if (hw->mac.type != ixgbe_mac_e610)
                        return -EOPNOTSUPP;
                break;
@@ -1293,6 +1301,32 @@ static int ixgbe_send_vf_link_status(struct ixgbe_adapter *adapter,
        return 0;
 }
 
+/**
+ * ixgbe_negotiate_vf_features -  negotiate supported features with VF driver
+ * @adapter: pointer to adapter struct
+ * @msgbuf: pointer to message buffers
+ * @vf: VF identifier
+ *
+ * Return: 0 on success or -EOPNOTSUPP when operation is not supported.
+ */
+static int ixgbe_negotiate_vf_features(struct ixgbe_adapter *adapter,
+                                      u32 *msgbuf, u32 vf)
+{
+       u32 features = msgbuf[1];
+
+       switch (adapter->vfinfo[vf].vf_api) {
+       case ixgbe_mbox_api_17:
+               break;
+       default:
+               return -EOPNOTSUPP;
+       }
+
+       features &= IXGBE_SUPPORTED_FEATURES;
+       msgbuf[1] = features;
+
+       return 0;
+}
+
 static int ixgbe_rcv_msg_from_vf(struct ixgbe_adapter *adapter, u32 vf)
 {
        u32 mbx_size = IXGBE_VFMAILBOX_SIZE;
@@ -1370,6 +1404,9 @@ static int ixgbe_rcv_msg_from_vf(struct ixgbe_adapter *adapter, u32 vf)
        case IXGBE_VF_GET_PF_LINK_STATE:
                retval = ixgbe_send_vf_link_status(adapter, msgbuf, vf);
                break;
+       case IXGBE_VF_FEATURES_NEGOTIATE:
+               retval = ixgbe_negotiate_vf_features(adapter, msgbuf, vf);
+               break;
        default:
                e_err(drv, "Unhandled Msg %8.8x\n", msgbuf[0]);
                retval = -EIO;