mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-06 01:49:46 +00:00
ixgbe: handle IXGBE_VF_FEATURES_NEGOTIATE mbox cmd
[ Upstream commit 823be089f9 ]
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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
b7b1c92baf
commit
822b967dc2
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user